通常,按钮仅设计用于单击,但 tkinter 允许您为任何小部件的几乎任何事件添加绑定。如果您正在构建扫雷游戏,您可能不想使用Button
小部件,因为按钮具有您可能不想要的内置行为。
相反,您可以使用Label
, Frame
, or a Canvas
项目相当容易。主要困难是右键单击可能在不同平台上意味着不同的事件。对于某些人来说是<Button-2>
对某些人来说<Button-3>
.
这是一个使用框架而不是按钮的简单示例。左键单击框架会将其变为绿色,右键单击将其变为红色。此示例也可以使用按钮,但其行为会有所不同,因为按钮具有左键单击的内置行为,而框架和其他一些小部件则没有。
import tkinter as tk
def left_click(event):
event.widget.configure(bg="green")
def right_click(event):
event.widget.configure(bg="red")
root = tk.Tk()
button = tk.Frame(root, width=20, height=20, background="gray")
button.pack(padx=20, pady=20)
button.bind("<Button-1>", left_click)
button.bind("<Button-2>", right_click)
button.bind("<Button-3>", right_click)
root.mainloop()
或者,您可以绑定到<Button>
, <ButtonPress>
, or <ButtonRelease>
,无论单击哪个鼠标按钮都会触发。然后您可以检查num
传入事件对象的参数来确定单击了哪个按钮。
def any_click(event):
print(f"you clicked button {event.num}")
...
button.bind("<Button>", any_click)