使用gtk时,它将运行一个主循环,并将您想做的 所有事情 安排为gtk循环的事件。您不需要线程即可执行任何 *** 作。
这是一个完整的,完整的,随时可以运行的示例,用于
glib.timeout_add执行您想要的 *** 作。
请注意,单击两个按钮(或单击一个按钮多次)不会冻结gui,并且所有 *** 作都是“同时”发生的…
import gtkimport glibdef yieldsleep(func): def start(*args, **kwds): iterable = func(*args, **kwds) def step(*args, **kwds): try: time = next(iterable) glib.timeout_add_seconds(time, step) except StopIteration: pass glib.idle_add(step) return startclass Fun(object): def __init__(self): window = gtk.Window() vbox = gtk.VBox() btnone = gtk.Button('one') btnone.connect('clicked', self.click_one) btnone.show() vbox.pack_start(btnone) btntwo = gtk.Button('two') btntwo.connect('clicked', self.click_two) btntwo.show() vbox.pack_start(btntwo) vbox.show() window.add(vbox) window.show() @yieldsleep def click_one(self, widget, data=None): yield 1 #time.sleep(1) print '1' yield 1 #time.sleep(1) print '2' yield 1 #time.sleep(1) print '3' @yieldsleep def click_two(self, widget, data=None): yield 1 #time.sleep(1) print '4' yield 1 #time.sleep(1) print '5' yield 1 #time.sleep(1) print '6'do = Fun()gtk.main()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)