Python Tkinter 中的 Lambda 和线程

Lambda and threading in Python Tkinter

起初我在我的一个 tkinter 按钮中使用了 lambda,以便在 运行 代码

时不自行执行函数
Button = tk.Button(root, text="Press me!", width=10, height=2, bg=BuyColor, command=lambda: sample(1, 2))

它工作得很好,但后来我不得不面对这个问题,我的 Tkinter 接口 freezes/lags 在尝试执行它正在调用的功能时。

由此,我发现线程的使用使得 root.mainloop() 在函数为 运行.

时不冻结成为可能
Button = tk.Button(root, text="Press me!", width=10, height=2, bg=BuyColor, command=threading.Thread(target=sample(1, 2)).start())

现在可以使用了,该函数不会导致 mainloop() 冻结。但是,我现在遇到了我再次遇到的第一个问题。这些功能 运行 甚至不用点击按钮!

我试过了,但它仍然导致程序冻结,即使它有线程。

Button = tk.Button(root, text="Press me!", width=10, height=2, bg=BuyColor, command=lambda: threading.Thread(target=sample(1, 2)).start())

似乎唯一的方法是删除 target=sample() 中的 (),但我每次按下时都需要使用这些特定变量调用 sample(1, 2) 函数按钮。还有其他调用 sample() 函数但具有不同变量的按钮。

有没有更有效的方法来做到这一点而不必为不同的按钮编写不同的函数?

感谢@acw1668 和@Frank Yellin 的评论,我得以修复代码。

所有这些协同工作的最终代码是:

Button = tk.Button(root, text="Press me!", width=10, height=2, bg=YourColor, command=lambda: threading.Thread(target=sample, args=(1, 2)).start())

如果函数只需要一个变量,应该是:

Button = tk.Button(root, text="Press me!", width=10, height=2, bg=YourColor, command=lambda: threading.Thread(target=sample, args=(1,)).start())

没有 , 代码将无法运行。