为什么我的Tkinter小部件存储为None?
我把我的button放到一个数组中,但当我打电话给他们时,他们不在那里。 如果我打印出我得到的数组:
{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, ...}
我只是不知道我做错了什么。
from tkinter import * def main(): pass if __name__ == '__main__': main() b={} app = Tk() app.grid() f = Frame(app, bg = "orange", width = 500, height = 500) f.pack(side=BOTTOM, expand = 1) def color(x): b[x].configure(bg="red") # Error 'NoneType' object has no attribute 'configure' print(b) # 0: None, 1: None, 2: None, 3: None, 4: None, 5:.... ect def genABC(): for r in range(3): for c in range(10): if (c+(r*10)>25): break print(c+(r*10)) b[c+(r*10)] = Button(f, text=chr(97+c+(r*10)), command=lambda a=c+(r*10): color(a), borderwidth=1,width=5,bg="white").grid(row=r,column=c) genABC() app.mainloop()
每个Tkinter小部件的grid
, pack
和place
方法在原地运行,并始终返回None
。 这意味着您不能在创build小部件的同一行上调用它们。 相反,他们应该被调用在下面的行:
widget = ... widget.grid(...) widget = ... widget.pack(...) widget = ... widget.place(...)
所以,在你的代码中,这将是:
b[c+(r*10)] = Button(f, text=chr(97+c+(r*10)), command=lambda a=c+(r*10): color(a), borderwidth=1,width=5,bg="white") b[c+(r*10)].grid(row=r,column=c)