好吧,所以我开始编程扫雷器。为此,我需要一个可变数量的按钮(或者我应该使用不同的东西)。因此,我得到了两个循环,应该创建一个带有名称的按钮。但是我当然需要按钮才能有其他名称。所以F.I。:第一个按钮= button_1第二个按钮= button_2...
我的代码如此:
class test(Tk):
def __init__(self):
self.frame_game = Frame(self)
for i in range(1, height):
for j in range(1, height):
# here i need the button to be created
我尝试了:
globals()['Button_' + str(i) + str(j)] = Button(...)
但这是不起作用的,因为我需要一个全局的按钮。
我也尝试了
vars(self)['Button_' + str(i) + str(j)] = Button(self.frame_game, text='0').pack()
我以后包装标签:
self.frame_game.pack()
它不会抛出异常。
有人有一个主意吗?
编辑:有用!!!!代码只是没有进入循环。将其更改为
for i in range(0, height):
当然,还有J。工作代码在循环中如下:
vars(self)['Button_' + str(i) + str(j)] = Button(self.frame_game, text='0').pack()
- 您可以按以下方式声明全局按钮:
- 设置按钮的全局变量名称
global myBtn
myBtn = Button(root, text = "This is a global button")
谢谢Mohamed Elghobary
您绝不应该创建这样的变量。它使您的代码很难阅读,很难调试。
而是将小部件存储在列表或字典中。由于您想用名称引用它们,因此词典最有效:
self.buttons = {}
for i in range(1, height):
for j in range(1, height):
name = "Button_{}_{}".format(i,j)
button = Button(...)
button.pack()
self.buttons[name] = button
使用上述内容,您稍后可以引用self.buttons["Button_1_1"]
等按钮
另外,在您的代码中,您正在做类似Button(...).pack()
之类的事情。.pack()
返回None
,因此您将所有变量设置为None
。如果要保存对按钮的引用,则需要在创建按钮的单独语句中调用pack
(或grid
或place
)。