KDE4
誰もがテクノロジー、外観、インターフェースの概念の湿気をすでに通り抜けていますが、本当の謝罪者は、KDE4が安定期に入るとすべてがうまくいくこと、そして一年の絶え間ないグリッチに耐えられない弱者の背教者が戻ってくることを知っています。
今真剣に-新しいKDEの重要な技術-プラズマ。 したがって、KDEで快適に生活するには、 プラズモイドを作成する必要があります。 カーネル、Xサーバー、KDEの操作を行うCおよびC ++のおかげで、私たち世代のWeb開発者、および一般的にシンプルに慣れている人々は、ご存知のPythonなどのより馴染みのある言語を使用してシステムに慣れることができますバッテリー。
パッケージ
上記のすべてについて、ご使用のバージョンのKDEでpython plasmoidのサポートが必要です。 Ubuntuの最新リリースではこのサポートがあります。
Pythonプラスモイドはパッケージにまとめられています。 パッケージは、zipでラップされたファイル構造です。
./contents
./contents/code
./contents/code/main.py
./metadata.desktop
それでは始めましょう。 plasma-informerフォルダーを作成し、その中にリストのフォルダーとファイルを作成します。 行の最初のmetadata.desktopでは、フィールドがかなり話していると仮定します。
[Desktop Entry]
Encoding=UTF-8
Name=Informer about something
Type=Service
ServiceTypes=Plasma/Applet
X-Plasma-API=python
X-Plasma-MainScript=code/main.py
Icon=chronometer
X-KDE-PluginInfo-Author=
X-KDE-PluginInfo-Email=deeppy@kuku.ya
X-KDE-PluginInfo-Name=plasma-informer
X-KDE-PluginInfo-Version=1.0
X-KDE-PluginInfo-Website=http://habrahabr.ru
X-KDE-PluginInfo-Category=Tests
X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true
パッケージの説明はもちろん、パッケージをあらゆる種類のリストに適切に統合するための重要な部分ですが、地球の塩はコンテンツ/コード/main.pyにあり、これには多くのコメントが装備されています:
#! /usr/bin/python # -*- coding: utf8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * from PyKDE4.kdecore import * from PyKDE4.kdeui import * from PyKDE4.plasma import Plasma import plasma class MyLabel(Plasma.Label): " , ." def setText(self,text): " . ." width = QFontMetrics(self.font()).width(text) self.setMinimumWidth(width) self.setMaximumWidth(width) Plasma.Label.setText(self,text) class PyInfApplet(plasma.Applet): " . - , ..." def __init__(self,parent,args=None): " , ." plasma.Applet.__init__(self,parent) # , ! def init(self): # self.setHasConfigurationInterface(False) # , self.setAspectRatioMode(Plasma.IgnoreAspectRatio) # , , self.timer = self.startTimer(1000) # "", , self.mlayout = QGraphicsLinearLayout(Qt.Horizontal) # self.label = MyLabel() self.label.setText('Yahooho') # self.mlayout.addItem(self.label) # , Plasma, ! self.setLayout(self.mlayout) def timerEvent(self,ev): " " pass def constraintsEvent(self, constraints): if constraints & Plasma.SizeConstraint: self.resize(self.size()) def CreateApplet(parent): " Plasma" return PyInfApplet(parent)
コードからわかるように、アプレットは何もしませんが、愚かな碑文でパネルを占有します。 しかし、Plasmidを使用した実験の場合は、Plasmidをインストールして、それがどのように機能するかを確認します。 パッケージのルートでzip -r ../plasma-informer.zip *を実行し、インストールします:plasmapkg -i ../plasma-informer.zip
パッケージは、.kde / share / apps / plasma / plasmoids / plasma-informerフォルダーのホームディレクトリにインストールされます。ファイル.kde / share / apps / plasma / plasmoids / plasma-informer / contents / code /を編集することにより、開発作業を続行できます。 main.py。 2番目-結果を確認する必要があり、すべてのpythonistsはパッケージのプロパティを知っています-コードを更新するために既にパッケージをインポートしている場合は、pythonコード全体をリロードすることをお勧めします。 私たちの場合、これは一般的にリスクの高い操作であるプラズマ過負荷に相当します。コントロールなしでデスクトップをそのままにしておくことになります。 したがって、ジェダイには特別なユーティリティ-plasmoidviewerがあります。
〜plasmoidviewerプラズマインフォーマー
プラスモイドはすでにインストールされているので、それを見ることができます:plasmoidviewer plasma-informer
インフォーマーに意味をロードするには、timerEventコードを編集します。
def timerEvent(self,ev): " " self.label.setText(open('/proc/loadavg','r').read().strip())
今、インフォーマーは本当にそのようなことを私たちに知らせます。
しかし、2番目のアプレット(図で見ることができるもう1つのアプレット、Amarokの制御に役立ちます)の配置では、インポートに問題がありました。 小さな回避策は/usr/share/kde4/apps/plasma_scriptengine_python/plasma_importer.pyを編集することです。PlasmaImporterクラスで、__ init__から宣言self.toplevel = {}を取り出し、これを行いました。
class PlasmaImporter(object): toplevel = {} def __init__(self): sys.path.append('<plasma>') sys.path_hooks.append(self.hook)
このような機能により、トップレベルはオブジェクトのインスタンスではなくクラスに属します。最初の段階では、2時間にわたって私を困惑させましたが、ここでは役立ちました。
宿題-あなた自身のカルマを監視し、検証のためのコードはコメントで受け入れられます。
PS猫プラズマ再起動
kbuildsycoca4
kquitapp plasma
plasma
PPSがKDE4.2を提供し、バグが出ました。より正確には、モジュールが少し置き換えられました。 インポートプラズマラインをPyKDE4からプラズマとしてインポートplasmascriptに置き換えると、すべてが再び機能します。
PPPS一連の更新後、どの瞬間から思い出せないが、再び壊れた。 解決策は、metadata.desktopに次の行を追加することです:X-Plasma-MainScript = code / main.py