为什么我的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小部件的gridpackplace方法在原地运行并始终返回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)