当您收到诸如之类的错误时
'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过一样。
您必须决定是要使用
grid还是要使用
pack,并且只对根窗口中的所有小部件使用一个或另一个。



