需要在另一个线程在python中完成时终止该线程的帮助吗

2024-06-16 12:34:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • 扫描
  • 发现
  • 退出

在Scan和Discover click期间,我想创建一个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函数完成后,我才能获得顶层窗口。你知道吗

我需要一些关于如何启动线程的小帮助。我还想销毁顶层窗口,一旦各自的功能完成,即,。在DiscoverScan函数完成后要销毁的顶级窗口

更新:

我稍微修改了代码。以前我只创建了一个线程。现在我做了两个线程来同时做这些工作,现在它工作了。你知道吗

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

t2完成时,如何关闭/终止t1?你知道吗


Tags: 函数textimportscandefroot线程start