python3.8的tkinter按钮事件函数实现多个参数另一种方法

在博文“python3.8的tkinter按钮事件函数实现多个参数”中使用Lambda表达式传递参数值。Lambda表达式理解有点困难,好在应用中只要照猫画虎一般不会出错。也可以使用另一种方法实现同样的功能。见下边的代码。

import tkinter as tk
root = tk.Tk()
def hit_me(x,y):           #单击标题为0,1,2按钮,标题为3按钮标题改为被单击按钮标题
    if (x==0 and y==0) or (x==0 and y==1) or (x==1 and y==0):
        buttons[1,1]['text']=buttons[x,y]['text']
    else:                 #单击标题为3按钮,其标题改为H
        buttons[x,y]['text']='H' 
buttons={}
n = 0
for row in range(2):
    for col in range(2): 
        def but_click(x=row,y=col): #每个按钮都生成一个事件函数,参数默认值是按钮的行列数
             hit_me(x,y)            #所有事件函数都调用同一函数
        button = tk.Button(root,text=str(n),command=but_click)  #指定事件函数,注意无实参
        button.place(x=20+col*60,y=20+row*60,width=50,height=50)
        buttons[row,col]=button    #键可以理解为行列组成的列表
        n += 1
root.mainloop()

该法在每一次循环中生成按钮时,同时定义了一个函数作为该按钮的单击事件函数:but_click(x=row,y=col),该函数有2个参数都有默认值,分别为该按钮所在位置的行列数,因此不同按钮的事件函数的参数相同,但默认值不同。所有事件函数都仅有一条语句:hit_me(x,y),即调用循环外部定义的同一函数,但参数的默认值是不同的。用command = but_click指定单击按钮调用的函数,调用时无实参,即令事件函数使用默认值。注意,虽然command都是指定but_click,但代表的函数是不同的。
博文“python3.8的tkinter按钮事件函数实现多个参数”中的方法是所有按钮被单击时调用的是同一个公用函数。而本文所介绍的方法是每一个按钮被单击时都调用自己的事件函数,显然这要占用较多资源,好在事件函数仅有一条语句,调用同一公用程序完成绝大部分功能,占用资源并不太多,因此本法还是有一定使用价值的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值