1

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

ウィンドウが応答しなくなります。誰か助けてくれませんか?

4

1 に答える 1

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()
于 2012-08-05T20:53:05.573 に答える