【发布时间】:2017-06-16 11:28:28
【问题描述】:
我正在使用 Python 2.7 和 Tkinter 为我的代码制作 GUI。 在某一时刻,一个框架在一个循环中充满了许多按钮。当我点击其中一个按钮时,该函数需要知道它是从哪里调用的,所以我搜索了一下,发现了一个很好的方法:
def generate_buttons(n):
for i in xrange(n):
newbutton = str(i)
newbutton = Button(myFrame, text=newbutton, command= lambda name=i:print_name(name)).grid(column=i)
和:
def print_name(name):
print name
所以当我生成这样的按钮时:
generate_buttons(5)
5 个按钮排成一行。如果我点击数字 3,控制台会打印“3”。
如果我想进一步访问这些按钮,我该怎么办。例如给他们一个新的外观。如果我只创建一个按钮,那就很容易了:
myButton.Button(text="bla")
myButton.config(relief=SUNKEN)
或
myButton.config(padx=10)
但在循环中,我一直覆盖“newbutton”。这是否意味着我无法再访问个人?如何“寻址”一个迭代创建且因此没有名称的对象?
【问题讨论】:
-
用它们填充
list或dict对象。 -
你可以看到一个类似的问题,昨天问的,here。
-
我对dicts不太熟悉,所以我试着用一个列表来做。在我声明的函数中: global newbutton;在函数之外,我使用以下方法初始化列表: newbutton = [None] * 5;然后通过调用函数来填充它: generate_buttons(5);当我这样做时: newbutton[2].config(...) 它说“AttributeError:'NoneType'对象没有属性'config'”
标签: python-2.7 tkinter