所以我一直在寻找答案,但找不到任何例子。
我想知道你是否可以在tkinter中使用所有相同的变量名创建多个按钮或标签或任何小部件,然后能够在创建它之后直接定位该小部件。
以下是一些代码示例,它将创建具有相同变量名称的5个按钮,如果按下按钮,它将在所述按钮上打印文本。
import tkinter as tk
btn_names = ["1st Button", "2nd Button", "3rd Button", "4th Button", "5th Button"]
class MyButton(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
self.createButtons()
def createButtons(self):
row_count = 0
for n in range(5):
someButton = tk.Button(self.parent, text=btn_names[n], command= lambda t=btn_names[n]: self.getText(t))
someButton.grid(row = row_count, column = 0)
row_count += 1
def getText(self, text):
print(text)
if __name__ == "__main__":
root = tk.Tk()
myApp = MyButton(root)
root.mainloop()
现在我无法弄清楚的是,是否可以对所述按钮进行更改。就像我现在想要更改按钮背景和前景颜色,但我没有办法定位我想要编辑的按钮。
我不能这样做:
someButton.config(background = "black", foreground = "white")
因为所有按钮都被命名为someButton
。
是否有可能在创建此庄园后编辑创建的小部件?
答案 0 :(得分:1)
我不确定这是最好的方法,但这是可能的。
不是在最初创建命令时将命令传递给按钮,而是添加一行,将命令配置为lambda函数并将someButton作为参数传递。然后在回调函数中,确保配置传递的按钮以更改其背景颜色。
import tkinter as tk
btn_names = ["1st Button", "2nd Button", "3rd Button", "4th Button", "5th
Button"]
class MyButton(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
self.createButtons()
def createButtons(self):
row_count = 0
for n in range(5):
someButton = tk.Button(self.parent, text=btn_names[n])
someButton.configure(command=lambda t=btn_names[n], btn = someButton: self.getText(t, btn))
someButton.grid(row = row_count, column = 0)
row_count += 1
def getText(self, text, btn):
print(text)
btn.configure(background = 'black')
if __name__ == "__main__":
root = tk.Tk()
myApp = MyButton(root)
root.mainloop()