使用 tkinter 和线程的两个并发线程

Two concurrent threads using tkinter and threading

我试图让两个按钮在 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()```

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

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")

然后同时按下两个按钮。