【问题标题】:Two concurrent threads using tkinter and threading使用 tkinter 和线程的两个并发线程
【发布时间】:2025-12-26 07:20:09
【问题描述】:

我试图让两个按钮在 Tkinter GUI 中执行两个独立的功能,它们都同时运行。我无法理解如何实现它。我试图从许多教程中建立这一点,但由于某种原因,这仍然是连续的。任何和所有的帮助表示赞赏。谢谢!

from tkinter import *
import threading

window = Tk()
window.geometry("500x200+460+170")
window.resizable(0, 0)
window.configure(bg='#030818')

screen_size = (61366, 78)

def opencv_code():
    print("recorder")
    time.sleep(10)

def knob_tracking():
    print("recorder1")

def start_opencv():
    threading.Thread(target=opencv_code()).start()

def start_knob_tracking():
    threading.Thread(target=knob_tracking()).start()

Label(window, text="Microscope", fg="white",bg="#030818",font=("Helvetica", 23, "bold")).pack()
Button(window, text="Recorder", command=start_opencv, bd=0, bg="gray",fg="white",font=("Helvetica", 15, "bold")).place(x=170,y=60)
Button(window, text="Recorder1", command=start_knob_tracking, bd=0, bg="gray",fg="white",font=("Helvetica", 15, "bold")).place(x=170,y=110)

window.mainloop()```

【问题讨论】:

    标签: python multithreading tkinter


    【解决方案1】:

    您需要从传递给线程的函数中删除括号,因为您正在调用函数,而不是传递函数句柄。所以改变:

    def start_opencv():
        threading.Thread(target=opencv_code()).start()
    
    def start_knob_tracking():
        threading.Thread(target=knob_tracking()).start()
    

    到:

    def start_opencv():
        threading.Thread(target=opencv_code).start()
    
    def start_knob_tracking():
        threading.Thread(target=knob_tracking).start()
    

    您可以通过将函数更改为:

    def opencv_code():
        print("recorder")
        time.sleep(10)
        print("recorder again")
    
    def knob_tracking():
        print("recorder1")
        time.sleep(5)
        print("recorder1 again")
    

    同时按下两个按钮。

    【讨论】:

    • 你认为多线程的 opencv + tkinter 会产生快速的结果吗?还是会是一个缓慢滞后的程序?附:感谢您纠正错误!
    • 我不知道opencv抱歉,所以不能评论速度。 Tkinter 通常本身就相当快。如果我的解决方案回答了您的问题,请考虑接受答案