我的gtk应用程序中有一个功能。我想在那个功能中等待2秒钟。 例如:
[...]
def do_something_and_wait(self):
#do something here
time.sleep(2)
# do something more
Gtk.main()
如果我直接使用time.sleep(2)
,Gui会冻结2秒钟。
如何在没有锁定Gtk.main()
的函数中等待2秒?
答案 0 :(得分:3)
您可以使用gtk.Main_iteration()
暂时将控制权交还给GUI,请参阅:
http://www.pygtk.org/pygtk2reference/gtk-functions.html#function-gtk--main-iteration 和 http://book.huihoo.com/gtk+-gnome-application-development/sec-mainloop.html
完全 2s不会休眠,但会暂停大约2秒,仍然允许GUI响应其他事件。正如bazza指出的那样,禁用调用小部件也是一个好主意。
def updateGUI():
'''Force update of GTK mainloop during a long-running process'''
while gtk.events_pending():
gtk.main_iteration(False)
def wait_2s():
for i in range(10):
time.sleep(0.2)
updateGUI()
答案 1 :(得分:1)
您可以添加gtk超时。见
http://www.pygtk.org/pygtk2tutorial/ch-TimeoutsIOAndIdleFunctions.html
您现有的函数会添加超时而不是time.sleep(),然后返回。第二个函数将“执行更多操作”,并将被指定为超时的回调函数。
您可能希望第一个函数禁用用于设置程序的这一部分运行的GUI小部件。这将阻止用户在等待2秒钟时按下该按钮两次。第二个功能应该重新启用它。