如何在回调函数中的tkinter中更改按钮的文本

时间:2018-10-21 12:51:42

标签: python python-3.x tkinter

即使使用相同的回调命令有很多按钮,也可以在按下按钮时更改按钮上的文本吗?

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模块)

3 个答案:

答案 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)

希望您能理解我在这里说的话。如果您愿意,请回复我向您解释的程度。