button onclick 多个同名_Tkinter - 多个按钮相同的事件

Using Tkinter, I have many buttons. I would like the same callback function to be triggered every time any of the buttons pressed. How can I find out which button was pressed ?

def call(p1):

# Which Button was pressed?

pass

for i in range (50):

B1 = Button(master, text = '...', width = 2)

B1.grid(row = i*20, column = 60)

B1.bind('',call)

B2 = Button(master, text = '...', width = 2)

B2.grid(row = i*20, column = 60)

B2.bind('',call)

解决方案

Using a list to reference the dynamically created buttons and lambda to store a reference to the index of the button object. You can determine which button was clicked. In the below examples I use .cget("text") on the button object to demonstrate accessing the button widget.

import tkinter as tk

root = tk.Tk()

root.minsize(200, 200)

btn_list = [] # List to hold the button objects

def onClick(idx):

print(idx) # Print the index value

print(btn_list[idx].cget("text")) #Print the text for the selected button

for i in range(10):

# Lambda command to hold reference to the index matched with range value

b = tk.Button(root, text = 'Button #%s' % i, command = lambda idx = i: onClick(idx))

b.grid(row = i, column = 0)

btn_list.append(b) # Append the button to a list

root.mainloop()

Alternatively you can use bind and then access the widget from the event object generated.

import tkinter as tk

root = tk.Tk()

root.minsize(200, 200)

def onClick(event):

btn = event.widget # event.widget is the widget that called the event

print(btn.cget("text")) #Print the text for the selected button

for i in range(10):

b = tk.Button(root, text = 'Button #%s' % i)

b.grid(row = i, column = 0)

# Bind to left click which generates an event object

b.bind("", onClick)

root.mainloop()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值