使用 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")
然后同时按下两个按钮。
我试图让两个按钮在 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")
然后同时按下两个按钮。