【发布时间】:2016-05-03 00:37:32
【问题描述】:
from tkinter import *
class App:
def __init__(self, master):
frame = Frame(master)
frame.grid()
self.grid_data_table = ["NONE"]
self.D_Text = " "
self.a = 0
self.b = 0
for i in range(1,100 + 1):
self.grid_data_table.extend([i])
self.grid_data_table[i] = Button(frame, text=self.D_Text, font="bold", command=lambda: self.selected(i))
self.a = self.a + 1
self.grid_data_table[i].grid(row=self.b, column=self.a)
#self.grid_data_table[i]["text"] = str(i) # testing only
if self.a == 10:
self.b = self.b + 1
self.a = 0
def selected(self, num):
print("Loaded Button:", num)
root = Tk()
app = App(root)
root.mainloop()
无论如何,当我运行它时,我得到了一个 10x10 正方形中的 100 个按钮的网格,这正是我想要的方式,但问题是 command=self.selected(i) 似乎让所有按钮都执行自我操作。 selected(100) and no 1,2,3,4... 100. 我在这里做错了吗?
我想使用“列表”或“数组”来执行此操作,因为它比写出 100 个按钮要容易得多。
【问题讨论】:
标签: python arrays function lambda parameter-passing