python - Tkinter 在鼠标右键和左键单击时按钮不同的命令
问题描述
我正在用 Python 制作扫雷游戏并使用 tkinter 库来创建 gui。有没有办法绑定到 tkinter Button 两个命令,一个是右键单击按钮,另一个是左键单击?
解决方案
通常,按钮仅设计用于单击,尽管 tkinter 允许您为几乎任何带有任何小部件的事件添加绑定。如果您正在构建一个扫雷游戏,您可能不想使用Button
小部件,因为按钮具有您可能不想要的内置行为。
相反,您可以相当轻松地使用Label
、Frame
或项目。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)
推荐阅读
- python - Python将单词字符串转换为单词列表
- azure - 使用 Azure 机器学习的时间/预测系列
- flask - 如何正确设置 Flask + uWSGI + SQLAlchemy 以避免数据库连接问题
- python - beautifulsoup 按类值文本提取
- matlab - 使用 dsolve 绘制解曲线时遇到问题
- javascript - 如何在Javascript中获取第n个表列值
- pandas - 熊猫数据框中的匹配和重新排列值
- web - 网站如何切实可行地允许用户个人资料拥有自己的 URL?
- java - 使用带有 Spring boot Transaction 的 RxJava 1.1.5 不会回滚
- php - 使用 codeigniter 中的取消链接删除图像的权限被拒绝