写了一个 kde plasma applet

2009/01/23

Tags: linux plasma pyqt4 python

用 gnome 的时候,对 panel 上面的 cpu 等 applet 情有独钟。这个东西能让我对自己的系统有第一手信息,有时候某个程序出问题了 cpu 100% 了,这个时候系统反应不一定会变慢的,但是这个程序是必须要被干掉的,有了这个 applet 我就能知道第一时间知道出问题了。还有的时候看 firefox 里面的 flash 的时候也会出类似的情况,这时会导致看别的网页很慢,那就干掉他。
第一次装 kde 的时候发现没有那些东西,让我很失望。后来看到 ob 在 openbox 里面把 panel 设的短一点,然后用 conky 在空出来的地方显示一些信息,感觉豁然开朗啊,呵呵。
这次装好 kde,就弄了一个 conky,可是发现他的风格和系统不兼容。有点不爽,就琢磨自己能不能弄一个,因为需求实在太简单了。
昨天花了一个下午,总算弄好了。参考的文档 qt的类, pyqt4 turtorial,plasma python .
效果就这样。电池旁边那个就是。

代码
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyKDE4.plasma import Plasma
from PyKDE4 import plasmascript
import time                                      

class Cpuinfo(plasmascript.Applet):
        def __init__(self,parent,args=None):
                plasmascript.Applet.__init__(self,parent)

        def init(self):
                self.freqnow = ''
                self.freqmax = ''
                self.temp = ''
                self.text = ''   

                self.getCurrentFreq()
                self.getMaxFreq()
                self.getTemp()       

                self.setHasConfigurationInterface(False)
                self.setMinimumWidth(100)
                self.setAspectRatioMode(Plasma.Square)
                self.startTimer(1000)

        def getCurrentFreq (self):
                line = open ('/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq', 'r').read().rstrip('\n')
                line = int(line) / 1000 /1000.0
                self.freqnow = line

        def getMaxFreq (self):
                line = file('/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq', 'r').read().rstrip('\n')
                line = int(line) / 1000 /1000.0
                self.freqmax = line

        def getTemp (self):
                line = file('/proc/acpi/thermal_zone/TZ1/temperature', 'r').read().rstrip('\n')
                line = " ".join(line.split()[1:])
                self.temp = line

        def timerEvent(self, event):
                self.getCurrentFreq()
                self.getTemp()
                self.text = "%s\n%.2f %d%%" % (self.temp, self.freqnow, self.freqnow / self.freqmax * 100)
                self.update() 

        def paintInterface(self, painter, option, rect):
                painter.save()
                painter.setPen(Qt.white)
                #painter.setFont(QFont('Consolas',11))
                painter.drawText(rect, Qt.AlignVCenter | Qt.AlignHCenter, self.text)
                painter.restore()

def CreateApplet(parent):
                return Cpuinfo(parent)

if __name__ == '__main__':
        a = Cpuinfo(None)
        a.init()
        print a.freqnow

Comments