首页 > 解决方案 > Tkinter 在鼠标右键和左键单击时按钮不同的命令

问题描述

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

标签: pythonbuttontkinter

解决方案


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

相反,您可以相当轻松地使用LabelFrame或项目。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><ButtonRelease>,无论单击哪个鼠标按钮都会触发。然后,您可以检查num传入事件对象的参数以确定单击了哪个按钮。

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

推荐阅读