在Button类的派生类中增加属性以及用事件绑定类
程序员文章站
2022-07-02 11:22:24
纠正了在Button类的派生类中增加属性行号、列号和雷状态可以简化扫雷程序错误看法。说明了从tkinter的类派生新类及事件绑定类的方法及注意事项。...
原以为在Button类的派生类中增加属性行号、列号和雷状态可以简化扫雷程序,但有点想当然了,实际做起来,没有达到简化的效果,可能比较容易读懂程序,但更加消耗资源。本想把此博文删除,但考虑应给看过此博文的读者一个交代,另外觉得在Button类的派生类中增加属性以及用事件绑定类可能对读者有点参考价值,博文就保留了,但把题目和文字改了,程序没有改动。下边程序说明具体实现方法。
from tkinter import * #为了绑定Button类和鼠标右击和左键单击事件,不能使用import tkinter as tk
class MyButton(Button):
def __init__(self,master,command,row, col):
super().__init__(master=master,command=command,bg="Silver",fg='red',font=("Arial",20))
self.row = row #按钮所在位置的行数
self.col = col #按钮所在位置的列数
self.stateOfmine=0 #-1=有雷,-2=有雷标????,-3=有雷标❔,0=无雷未打开,1=无雷已打开,2=无雷标????,3=无雷标❔
self.mines=-1 #相邻雷数量:-1未计算相邻地雷数,0-8相邻按钮下的雷数
def do_job():
label1['text']='鼠标左键单击'+str(b1.row) #鼠标左键单击事件函数
def do_job1(event):
label1['text']='鼠标左键双击击' #鼠标左键双击击事件函数
def do_job2(event):
label1['text']='鼠标右键单击' #鼠标右键单击事件函数
root = Tk()
root.title('扫雷')
root.geometry("300x300")
root.resizable(width=False,height=False) #下句 不能绑定派生类MyButton
root.bind_class('Button','<Double-Button-1>',do_job1) #使用任何类对象的bind_class()都可以完成类和事件绑定
root.bind_class('Button','<Button-3>',do_job2) #如import tkinter as tk,参数1改为'tk.Button',不能绑定
label1=Label(root,text='0',bd='5',fg='red',font=("Arial",15))
label1.pack()
b1=MyButton(root,command=do_job,row=1,col=2)
b1.pack()
root.mainloop()
本文地址:https://blog.csdn.net/geng_zhaoying/article/details/109243370