我正在尝试为蓝牙创建一个简单的UI。用户界面有一个带3个按钮的根窗口。
在扫描和发现点击期间,我想创建一个Toplevel
窗口,其中label
和progressbar
及其相应的功能在Toplevel
窗口后面运行。
这是我的代码:
import threading
import ttk
import time
from Tkinter import *
from bluetooth import *
def bluethscn():
...
do_something...
...
return
def msgwindow(msg):
window1 = Toplevel()
frame1 = Frame(window1)
frame1.pack()
label = Label(frame1, text=msg)
label.pack()
frame2 = Frame(window1)
frame2.pack()
pb_hd = ttk.Progressbar(frame2, orient='horizontal', mode='indeterminate')
pb_hd.pack()
pb_hd.start(6)
def discover():
print "searchine for nearby devices..."
nearby_devs = discover_devices(8,True,True)
print "nearby_devs = ", nearby_devs
def start_discover():
t1 = threading.Thread(target=msgwindow("searching..."), args=())
t2 = threading.Thread(target=discover, args=())
t1.start()
t2.start()
root=Tk()
label = Label(root, text="Root Window").pack()
butn_quit = Button(root, text="Quit", command= root.quit)
butn_quit.pack()
butn_dcov = Button(root, text="Discover", command=start_discover)
butn_dcov.pack()
butn_scan = Button(root, text="Scan", command=bluethscn)
butn_scan.pack()
root.mainloop()
我在创建线程时遵循this示例。这里的问题是仅在Discover
或Scan
函数完成后才能获取Toplevel窗口。
我需要一些关于如何启动线程的帮助。而且我也希望在相应的功能完成后销毁Toplevel窗口,即。 Discover
或Scan
功能完成后要销毁的Toplevel窗口
更新
我修改了一些代码。以前我刚刚创建了一个单线程。现在我做了2个线程同时完成这些工作,现在它可以工作了。
但问题是,在discover
函数完成后,顶层窗口继续运行。当发现功能完成时,我如何退出顶层窗口,即。 t1
线程完成时停止/销毁t2
线程。
如果我添加t1.join()
,则会发生同样的情况。这两个过程都是并行发生的,但是当t2
完成时,t1
一直在运行
t1
完成后,如何关闭/终止t2
?