即使使用相同的回调命令有很多按钮,也可以在按下按钮时更改按钮上的文本吗?
button1 = Button(self, text="1", command=self.getPressed)
button2 = Button(self, text="2", command=self.getPressed)
button1.grid(row=0, column=0)
button2.grid(row=0, column=1)
def getPressed(self):
button.config(self, text="this has been pressed", state=DISABLED)
我知道这段代码将无法正常工作,因为button不是变量,但这是我想到的那种回调方法。 (我正在使用python 3.7中的tkinter模块)
答案 0 :(得分:0)
您可以使用lambda将按钮的编号作为参数传递给回调函数:
command=lambda:self.getPressed(1)
,然后使用if来确定按下了哪个按钮。或者,您可以将按钮存储在列表中,然后将索引传递给tha回调函数。
不使用类符号的示例:
from tkinter import *
root = Tk()
def getPressed(no):
button_list[no].config(text="this has been pressed", state=DISABLED)
button_list = []
button_list.append(Button(text="1", command=lambda:getPressed(0)))
button_list.append(Button(text="2", command=lambda:getPressed(1)))
button_list[0].grid(row=0, column=0)
button_list[1].grid(row=0, column=1)
root.mainloop()
答案 1 :(得分:0)
button1 = Button(..., command=lambda widget="button1": DoSomething(widget))
您必须将小部件引用传递到回调函数中,您可以这样操作:
import tkinter as tk
main = tk.Tk()
def getPressed(button):
tk.Button.config(button, text="this has been pressed", state = tk.DISABLED)
button1 = tk.Button(main, text="1", command=lambda widget='button1': getPressed(button1))
button2 = tk.Button(main, text="2", command=lambda widget = 'button2': getPressed(button2))
button1.grid(row=0, column=0)
button2.grid(row=0, column=1)
main.mainloop()
答案 2 :(得分:0)
我要做的是使用lambda将值传递到函数中,以便您可以编码所按下的按钮。这就是您在按钮中使用lambda的样子,
self.Button1 = Button(self, text="1", command=lambda: getPressed(1))
如果您这样做。您可以定义一个将接受该参数并将其转换为字符串的方法。如果该值等于“ 1”:请对此进行处理。否则,如果值等于“ 2”:对该按钮执行操作。
如果我将此知识应用于您的工作。看起来像这样。
button1 = Button(self, text="1", command=self.getPressed)
button2 = Button(self, text="2", command=self.getPressed)
button1.grid(row=0, column=0)
button2.grid(row=0, column=1)
def getPressed(self, number):
if(number == "1"):
button1.config(self, text="this button has been pressed", state=DISABLED)
elif(number == "2"):
button2.config(self, text="Button 2 has been pressed" state=DISABLED)
希望您能理解我在这里说的话。如果您愿意,请回复我向您解释的程度。