我用Python和PyGObject编写了一些简单的程序。我想让她通过ProgressBar通知用户进度。我在google上搜索到这个进程应该是一个单独的线程,否则接口会保持不变,现在有一些类似的测试:
import time
import threading
from gi.repository import Gtk, GObject
GObject.threads_init()
def tread_function():
progress.set_fraction(0)
time.sleep(5)
progress.set_fraction(0.25)
time.sleep(5)
progress.set_fraction(0.5)
time.sleep(5)
progress.set_fraction(0.75)
time.sleep(5)
progress.set_fraction(1)
def clickOk(*args):
t = threading.Thread(target=tread_function)
t.start()
def clickCancel(*args):
pass
buttonOk = Gtk.Button("Start Count")
buttonOk.connect("clicked", clickOk)
buttonCancel = Gtk.Button("Cancel Count")
buttonCancel.connect("clicked", clickCancel)
progress = Gtk.ProgressBar()
progress.set_show_text(True)
vBox = Gtk.VBox()
vBox.pack_start(buttonOk, True, True, 10)
vBox.pack_start(buttonCancel, True, True, 10)
vBox.pack_start(progress, True, True, 10)
window = Gtk.Window()
window.connect('destroy', Gtk.main_quit)
window.add(vBox)
window.show_all()
Gtk.main()
现在,当界面不坚持,我想给一个机会,用户停止工作,以充分完成,如果他做了设置错误。但我无法在google上搜索,也无法在文档中找到如何在线程完全执行之前杀死它
在python中没有简单的方法可以杀死线程。为了解决这个问题,您需要构建自己的钩子来触发早期线程退出。一个好的方法是使用
Event
,这是一个可以设置的线程安全触发器不过,在这样做之前,您可能希望将代码封装在一些类中。从长远来看,编写没有类的gui只会给你带来痛苦
相关问题 更多 >
编程相关推荐