在python

时间:2015-05-19 17:09:30

标签: python multithreading

我正在尝试为蓝牙创建一个简单的UI。用户界面有一个带3个按钮的根窗口。

  • 扫描
  • 发现
  • 退出

在扫描和发现点击期间,我想创建一个Toplevel窗口,其中labelprogressbar及其相应的功能在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示例。这里的问题是仅在DiscoverScan函数完成后才能获取Toplevel窗口。

我需要一些关于如何启动线程的帮助。而且我也希望在相应的功能完成后销毁Toplevel窗口,即。 DiscoverScan功能完成后要销毁的Toplevel窗口

更新

我修改了一些代码。以前我刚刚创建了一个单线程。现在我做了2个线程同时完成这些工作,现在它可以工作了。

但问题是,在discover函数完成后,顶层窗口继续运行。当发现功能完成时,我如何退出顶层窗口,即。 t1线程完成时停止/销毁t2线程。 如果我添加t1.join(),则会发生同样的情况。这两个过程都是并行发生的,但是当t2完成时,t1一直在运行

t1完成后,如何关闭/终止t2

0 个答案:

没有答案