欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

在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