【问题标题】:How to display continuous data in a py-gtk window?如何在 py-gtk 窗口中显示连续数据?
【发布时间】:2012-08-05 20:47:02
【问题描述】:

我正在尝试使用 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 循环,例如,

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

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

【问题讨论】:

    标签: python time pygtk


    【解决方案1】:

    使用gobject.timeout_add:

    gobject.timeout_add(500, self.update)
    

    让 gtk 每 500 毫秒调用一次 self.update()

    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()
    

    【讨论】:

    • 你能告诉我 GTK-3 中的 gobject 等价物吗?
    • 根据this tutorialfrom gi.repository import GObject,然后GObject.timeout_add(...)
    • 我应该在哪里添加 gobject.timeout_add?我还是不明白!
    • @manoj:在构建 gtk 小部件时,但在调用 gtk.main()(启动 gtk 事件循环)之前,您可以调用 gobject.timeout_add(...) 说:“顺便说一下,我希望这个函数每N毫秒被调用一次”。您可以将它粘贴在任何地方(只要已经定义了回调函数)。我不确定这个解释是否清楚,所以我提供了一个可运行的示例。
    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    相关资源
    最近更新 更多