Темп процессора Python в системном трее Linux - PullRequest
1 голос
/ 05 марта 2011

Я использую tint2 для панели и хочу показать темп процессора в качестве иконки в системном трее, так как нет никаких плагинов для tint2, которые делают это, и я просто хотел бы знать, как это сделать в любом случае, есть ли был один или нет. Сценарий, который у меня пока есть:

#! /usr/bin/python
import pygtk,os
pygtk.require("2.0")
import gtk
import egg.trayicon
t = egg.trayicon.TrayIcon("CPUTemp")
cpu_temp=os.popen('sensors | grep "temp1:" | cut -d+ -f2 | cut -c1-2').read()
t.add(gtk.Label(cpu_temp))
t.show_all()
gtk.main()

В принципе, это работает в первый раз, но я также хотел бы, чтобы он обновлялся каждые 5 секунд или около того. Любая помощь с благодарностью.

Ответы [ 2 ]

3 голосов
/ 05 марта 2011

вы можете определить таймер с помощью timeout_add_seconds и обновить значок в трее в обратном вызове. Посмотрите, подойдет ли вам приведенный ниже пример:

import gtk, gobject, os

class CPUTimer:
    def __init__(self, timeout):

        self.window = gtk.Window()
        vbox = gtk.VBox()
        self.window.add(vbox)
        self.label = gtk.Label('CPU')
        self.label.set_size_request(200, 40)
        vbox.pack_start(self.label)

        # register a  timer
        gobject.timeout_add_seconds(timeout, self.timer_callback)

        self.window.connect("destroy", lambda w: gtk.main_quit())
        self.window.connect("delete_event", lambda w, e: gtk.main_quit())

        self.window.show_all()
        self.timer_callback()

    def timer_callback(self):
        cpu_temp = os.popen('sensors | grep "temp1:" | cut -d+ -f2 | cut -c1-2').read()
        print 'update CPU: ' + cpu_temp
        self.label.set_text('CPU: ' + cpu_temp)
        return True

if __name__ == '__main__':
    timer = CPUTimer(1) # sets 1 second update interval
    gtk.main()

надеюсь, это поможет, с уважением

0 голосов
/ 05 марта 2011

Посмотрите на модуль Python "Threading". Создайте функцию, которая запускает команду обновления текста gtk.Label с новым выводом (t.set_text (str)). И запустить эту функцию в потоке.

http://docs.python.org/library/threading.html

...