GTK3和Python:为什么set_属性被延迟?
此脚本无法按预期工作:GTK3和Python:为什么set_属性被延迟?,python,gtk3,Python,Gtk3,此脚本无法按预期工作: import gi import time gi.require_version('Gtk', '3.0') from gi.repository import Gtk class GridWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="hi") def fnButton1(self): button1.s
import gi
import time
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class GridWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="hi")
def fnButton1(self):
button1.set_property("label", "TEST")
print("hello")
time.sleep(3)
print("you")
grid = Gtk.Grid()
button1 = Gtk.Button(label="Button 1")
button1.connect("clicked", fnButton1)
button2 = Gtk.Button(label="Button 2")
grid.add(button1)
grid.attach(button2, 1, 0, 1, 1)
self.add(grid)
win = GridWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
单击按钮1时,其标签不会更改,但会打印“hello”。这只发生在3秒钟过去之前:标签变为“测试”并打印“您”。属性更改似乎是在函数fnButton1()完成时发生的,而不是在此之前。。为什么?如何解决这个问题
我只是希望能够在一些函数的开头更改一些小部件属性,这些函数从单击按钮开始。编程时这是正常的,不是吗?为什么GTK3(使用Python)的行为会有所不同
def fnButton1(self):
button1.set_property("label", "TEST")
print("hello")
time.sleep(3)
print("you")
set_属性
创建绘图命令,这些命令排队进入后台进程,并在Gtk的事件循环“有时间”进行迭代时执行。sleep命令有效地阻止事件循环执行3秒钟。但是,print命令会立即执行。您可以看到,在此期间在现有窗口上移动另一个窗口时,该窗口的内容可能也不会更新
如果您真的需要睡眠
,您应该寻找几种方法中的一种来延迟而不阻塞事件循环(例如,GLib的add_timeout)
通常,在事件驱动系统(如大多数图形窗口系统)中,使用sleep
或任何阻止事件循环的功能都不是一个好主意。可能的重复