当您收到诸如之类的错误时'nonetype' object has no attribute 'X'
,表明您有一个变量值为None
,并且正在尝试执行None.X()
。不管您使用的是tkinter还是任何其他软件包。因此,您必须问自己:“为什么我的变量具有值None
?”
问题是这一行:
but1 = tkinter.Button(window, text="Button1", command=btn1).grid(column = 1, row = 1)
在python中,当您执行时foo=x(...).y(...)
,foo
将始终具有最后一个调用函数的值。在上述情况下,but
将具有由返回的值.grid(column = 1, row = 1)
,并且grid
始终返回None
。因此,but1
是None
,因此您将获得’‘nonetype’对象没有属性’pack’“。
因此,直接的解决方法是将您的呼叫移至grid
另一行:
but1 = tkinter.Button(window, text="Button1", command=btn1)
but1.grid(column = 1, row = 1)
这样,错误将消失。
但是,您还有另一个问题。打电话grid
,然后再打电话pack
不会按照您认为的去做。您只能有一个效果几何管理器在同一时间对于任何给定的部件,都grid
和pack
有几何经理。如果这样做了but1.grid(...)
,以后but1.pack(...)
,任何调用所grid
产生的效果都将被丢弃,就像您一开始从未调用grid
过一样。