2012-08-05 24 views
1

我正在尝试使用py-gtk构建一个简单的秒表应用程序。以下是我的秒表窗口中切换按钮的回调函数。如何在py-gtk窗口中显示连续数据?

def start(self,widget): 
    if widget.get_active():   
     widget.set_label('Stop') 
    else: 
     self.entry.set_text(str(time.time() - s)) 
     widget.set_label('Start') 

它工作得很好,除了一个事实,即时间不不断得到得到显示在输入小工具。如果我在'If'条件内添加无限循环,如

while 1: 
    self.entry.set_text(str(time.time() - s)) 

窗口变得无响应。有人可以帮忙吗?

回答

4

使用gobject.timeout_add

gobject.timeout_add(500, self.update) 

有GTK呼叫self.update()每500毫秒。

update方法检查是否秒表是活动的并且调用

self.entry.set_text(str(time.time() - s)) 
必要


这是相当吸引其使用gobject.timeout_add一个进度条简单的例子:

import pygtk 
pygtk.require('2.0') 
import gtk 
import gobject 
import time 

class ProgressBar(object): 
    def __init__(self): 
     self.val = 0 
     self.scale = gtk.HScale() 
     self.scale.set_range(0, 100) 
     self.scale.set_update_policy(gtk.UPDATE_CONTINUOUS) 
     self.scale.set_value(self.val) 
     gobject.timeout_add(100, self.timeout) 
    def timeout(self): 
     self.val += 1 
     # time.sleep(1) 
     self.scale.set_value(self.val) 
     return True 

def demo_timeout_add(): 
    # http://faq.pygtk.org/index.py?req=show&file=faq23.020.htp 
    # http://stackoverflow.com/a/497313/190597 
    win = gtk.Window() 
    win.set_default_size(300, 50) 
    win.connect("destroy", gtk.main_quit) 
    bar = ProgressBar() 
    win.add(bar.scale) 
    win.show_all() 
    gtk.main() 

demo_timeout_add() 
+0

你能告诉我GObject的相当于GTK-3? – Manoj 2012-08-05 21:07:56

+1

根据[本教程](http://python-gtk-3-tutorial.readthedocs.org/en/latest/cellrenderers.html),'从gi.repository导入GObject',然后'GObject.timeout_add(。 ..)'。 – unutbu 2012-08-05 21:15:09

+0

我应该在哪里添加gobject.timeout_add?我仍然没有得到它! – Manoj 2012-08-06 12:30:35