четверг, 30 октября 2008 г.

Мой первый плазмоид

Я поклонник KDE и python. С удивлением я, как и многие другие, смотрел на KDE 4.0. После вылизанного 3.5 это было конечно страшно. Особенно мне не хватало kicker и его "кикоидов". Но время идет, проект продолжает развиваться невзирая на возню анонимов на веб просторах, и теперь наконец то есть привязки plasma для python, а значит теперь я сам себе автор плазмоидов.

Мой первый плазмоид страшно кособок, но тем не менее показателен. Итак, по устоявшейся традиции среди Qt-шников, будем делать свой браузер. Правда этот, удивительный своей неординарностью, экземпляр, мы встроим прямо в рабочий стол.

Этот код просто вставьте в командную строку, он создаст структуру каталогов, файлы, соберет пакет, и установит его для текущего пользователя.


mkdir -p wwwv/contents/code
cd wwwv
cat > metadata.desktop << EOF
[Desktop Entry]
Encoding=UTF-8
Name=WWW viewer
Type=Service
ServiceTypes=Plasma/Applet
X-Plasma-API=python
Icon=chronometer

X-KDE-PluginInfo-Author=Mikhail Krivushin
X-KDE-PluginInfo-Email=mkrivushin@yandex.ru
X-KDE-PluginInfo-Name=plasma-wwwv
X-KDE-PluginInfo-Version=1.0
X-KDE-PluginInfo-Website=http://deepwalker.blogspot.com
X-KDE-PluginInfo-Category=Tests
X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true
EOF

cat > contents/code/main.py << EOF
#! /usr/bin/python

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtWebKit
from PyKDE4.kdecore import *
from PyKDE4.kdeui import *
from PyKDE4.plasma import Plasma
import plasma

class PyWWWvApplet(plasma.Applet):
def __init__(self,parent,args=None):
plasma.Applet.__init__(self,parent)

self.url = None
self.clicked = QPoint()

def init(self):
KGlobal.locale().insertCatalog("www")

self.setHasConfigurationInterface(False)
self.setAspectRatioMode(Plasma.IgnoreAspectRatio)

self.dialog = None

self.theme = Plasma.Svg(self)
self.theme.setImagePath("widgets/background")
self.theme.setContainsMultipleImages(False)
self.theme.resize(self.size())

self.webview = Plasma.WebContent()
self.mlayout = QGraphicsLinearLayout(Qt.Vertical)
self.eline = Plasma.LineEdit()
self.mlayout.addItem(self.eline)
self.mlayout.addItem(self.webview)
self.setLayout(self.mlayout)

self.connect(self.eline,SIGNAL('returnPressed()'),self.open_page)

self.webview.setUrl(KUrl('http://127.0.0.1/'))
self.webview.update()

def open_page(self):
page = self.eline.text()
#print "Go to %s"%page
self.webview.setUrl(KUrl(page))
self.webview.update()

def shape(self):
if self.theme.hasElement("hint-square-clock"):
return plasma.Applet.shape(self)
path = QPainterPath()
path.addEllipse(self.boundingRect().adjusted(-2, -2, 2, 2))
return path


def constraintsEvent(self, constraints):
if constraints & Plasma.SizeConstraint:
self.resize(self.size())

def CreateApplet(parent):
return PyWWWvApplet(parent)
EOF

zip -r ../wwwv.zip .

plasmapkg -i wwwv.zip


Конечно же надо поставить соответствующие привязки. Так как я уже на 8.10, то просто сделал aptitude install python-plasma.

Далее располагайте плазмоид на рабочем столе и удивляйтесь мощи моего гения. Теперь же я, пожалуй, отправлюсь спать. А вы, дорогие мои, утомляйте неутомимый google бесчисленными запросами - "plasma python qt webkit" в поисках ответа на вопрос - а как же сделать, чтобы оно использовало прокси?

4 комментария:

akademic.name комментирует...

Добрый день.
Собираюсь написать свой первый плазмоид, никак не могу найти документацию. Какой документацией Вы пользовались?

Deepwalker комментирует...

Сложно даже как то подсказать, было то аж в прошлом году. Читал на kde.org документацию.

Попробуйте начать отсюда например -
http://techbase.kde.org/Development/Tutorials/Plasma/GettingStarted
Нашел в истории.

Deepwalker комментирует...

http://techbase.kde.org/Getting_Started/Build/KDE4/Python_Support

akademic.name комментирует...

Спасибо, буду читать.