我有问题:我打电话给thread.join(),我敢肯定线程正常工作的标准输出记录,但它无法更新GUI。Thread.join()不允许线程本身更新GUI
的例子是非常简单的:线程应该更新进度5倍:进度条开始全面清空,在时间0,并成为完全充满,在时间5 每次更新时每秒,所以它总共需要5秒钟。
thread.join()后会显示另一个窗口。
但问题是,在thread.join()我可以看到只是标准输出记录,但进度条没有更新。我必须等5秒钟,然后我可以看到一个完全填满的进度条,最后显示另一个窗口。
,所以我不能看到任何更新我的GUI,我的进度,这些5秒
这期间是代码:
def Interrupt_Button_clicked(widget, args=()):
t = threading.Thread(target=pulsing2, args=())
t.setDaemon(True)
t.start()
t.join()
builder.get_object('Azioni_Window').show()
def pulsing2():
progressbar.set_inverted(True)
fraction = 0.0
while True:
fraction += 0.2
progressbar.set_fraction(fraction)
print fraction # THIS WORKS CORRECTLY EVERY TIME, 5 TIMES IN TOTAL (1/0.2)
time.sleep(1)
if fraction == 1:
break
progressbar = builder.get_object('Progressbar1')
builder.get_object('Ferma_trovarete_Button').connect('clicked', Interrompi_Button_clicked)
builder.get_object('Trovarete_Window').show()
Gtk.main()
你不应该添加0.2五倍期望它等于1.0,因为0.2不能完全用二进制表示。如果它在这里工作,这是巧合。 – kindall 2014-09-01 01:06:44
**打印分数**在时间5打印1.0,** Gtk.Progressbar.get_fraction()**返回我1.0 – FrancescoN 2014-09-01 01:18:25
正如我所说,*如果它在这里工作,这是巧合。*因此,它的工作原理。这是巧合。 – kindall 2014-09-01 01:25:39