使鼠标右击和双击按钮事件使用同一事件函数

准备编写挖雷游戏,使用python tkinter按钮(Button)控件组成按钮矩阵,按钮有上百个。在地雷游戏中,按钮要响应鼠标右键单击、鼠标左键单击和双击事件。在建立按钮对象时,可为command指定左键单击事件函数。按照博文“增加鼠标右击按钮事件函数包含event和其它参数”介绍的方法,要为鼠标右键单击和鼠标左键双击按钮事件分别定义不同事件函数。如果能使鼠标右击和左键双击按钮事件使用同一事件函数,在按钮有上百个情况下,能少定义上百个函数,使程序占用的系统资源减少。本文介绍一种实现此功能的方法,见下边程序,实现方法是利用鼠标事件传递的参数num区分左右键,=1是左键,=3是右键。顺便说一下,事件函数之所以要传递行列号,是因为挖雷游戏按钮矩阵中的数据(例如有无雷、按钮上边不同情况下显示的内容等)都保存到一个2维列表中,2维列表的行列和按钮矩阵行列有对应关系。

import tkinter as tk
root = tk.Tk()
def hit_me(evt,x,y):
    if evt.num==1:      #=1,是左键,evt.x和evt.y是鼠标的坐标
        #evt.type=2是键盘,=4鼠标单击或双击,=6鼠标移动,也可区分鼠标不同动作
        buttons[x,y]['text']=x+y+evt.type
    else:               #=3,是右键    
        #buttons[x,y]['text']=x+y+evt.num
        evt.widget['text']=x+y+evt.num  #widget是响应事件的按钮对象
buttons={}
n = 0
for row in range(2):
    for col in range(2): #下句为每个按钮定义一个鼠标右击双击事件函数
        def but_RDclick(event,x=row,y=col): #参数x,y默认值是按钮的行列数
             hit_me(event,x,y)            #所有事件函数都调用同一函数
        button = tk.Button(root,text=str(n))
        button.place(x=20+col*60,y=20+row*60,width=50,height=50)
        button.bind("<Button-3>", but_RDclick)   #按钮绑定鼠标右击事件
        button.bind("<Double-Button-1>", but_RDclick)#按钮绑定鼠标左键双击事件
        buttons[row,col]=button      #字典的键是row,col,值是按钮对象
        n += 1
root.mainloop()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值