Tkinter 按钮鼠标右键和左键单击有不同的命令

Kon*_*ski 5 python tkinter button

我正在用 Python 制作扫雷游戏,并使用 tkinter 库来创建 gui。有没有办法将两个命令绑定到 tkinter Button,一个是右键单击按钮,另一个是左键单击?

Bry*_*ley 10

通常,按钮仅设计用于单击,但 tkinter 允许您为任何小部件的几乎任何事件添加绑定。如果您正在构建扫雷游戏,您可能不想使用该Button小部件,因为按钮具有您可能不想要的内置行为。

相反,您可以相当轻松地使用LabelFrame或 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()
Run Code Online (Sandbox Code Playgroud)

或者,您可以绑定到<Button><ButtonPress><ButtonRelease>,无论单击哪个鼠标按钮都会触发。然后,您可以检查num传入事件对象的参数来确定单击了哪个按钮。

def any_click(event):
    print(f"you clicked button {event.num}")
...
button.bind("<Button>", any_click)
Run Code Online (Sandbox Code Playgroud)