小部件作为小部件命令选项的参数
Widget as argument to command option of widget
我想在用户按下按钮时停用该按钮。因为我正在制作的 GUI 中有很多按钮。我想概括一下。
我正在执行以下操作:
def deactivate (btn):
btn.configure(state='disabled')
print ('Button is deactivated')
return
Button = Tk.Button(root, text='click',command=lambda: deactivate (Button))
上面的代码对我来说工作正常,但我在任何地方都没有看到有人使用它。所以,我想知道,这是否会带来我不知道的并发症?
您的实施没有问题。但是正如您所说,会有 很多按钮 具有相同的功能,那么我建议创建一个自定义按钮 class(继承自 tk.Button
)以嵌入此功能并将此自定义按钮 class 用于需要此功能的按钮。
下面是一个例子:
import tkinter as tk
class MyButton(tk.Button):
def __init__(self, parent=None, *args, **kw):
self._user_command = kw.pop("command", None)
super().__init__(parent, *args, **kw)
self["command"] = self._on_click
def _on_click(self):
self.configure(state="disabled")
if self._user_command:
self._user_command(self)
def on_click(btn):
print (f'Button "{btn["text"]}" is deactivated')
root = tk.Tk()
button1 = MyButton(root, text='click', command=on_click)
button1.pack()
button2 = MyButton(root, text='Hello', command=on_click)
button2.pack()
root.mainloop()
请注意,我已经更改了 command
选项的回调签名。按钮的实例将作为第一个参数传递给回调,这样你就可以在按钮上做任何你想做的事情。
我想在用户按下按钮时停用该按钮。因为我正在制作的 GUI 中有很多按钮。我想概括一下。 我正在执行以下操作:
def deactivate (btn):
btn.configure(state='disabled')
print ('Button is deactivated')
return
Button = Tk.Button(root, text='click',command=lambda: deactivate (Button))
上面的代码对我来说工作正常,但我在任何地方都没有看到有人使用它。所以,我想知道,这是否会带来我不知道的并发症?
您的实施没有问题。但是正如您所说,会有 很多按钮 具有相同的功能,那么我建议创建一个自定义按钮 class(继承自 tk.Button
)以嵌入此功能并将此自定义按钮 class 用于需要此功能的按钮。
下面是一个例子:
import tkinter as tk
class MyButton(tk.Button):
def __init__(self, parent=None, *args, **kw):
self._user_command = kw.pop("command", None)
super().__init__(parent, *args, **kw)
self["command"] = self._on_click
def _on_click(self):
self.configure(state="disabled")
if self._user_command:
self._user_command(self)
def on_click(btn):
print (f'Button "{btn["text"]}" is deactivated')
root = tk.Tk()
button1 = MyButton(root, text='click', command=on_click)
button1.pack()
button2 = MyButton(root, text='Hello', command=on_click)
button2.pack()
root.mainloop()
请注意,我已经更改了 command
选项的回调签名。按钮的实例将作为第一个参数传递给回调,这样你就可以在按钮上做任何你想做的事情。