I_d*_*hon 0 python windows windows-xp tkinter python-3.x
我是Python的新手,刚刚开始使用tkinter.运行下面的代码我得到一个属性错误but1.pack()(NoneType对象没有属性pack).但据我所知,这个错误对窗口的功能没有任何影响,它仍然pack是按钮.窗口仍然出现,所有按钮都按预期运行.
搜索我可以看到其他人有这个错误,但没有给出的答案解决了我的问题.希望你能提供帮助.
代码:
import tkinter
import ctypes
lst=[]
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
def closewindow():
window.destroy()
def btn1():
lst.append("Button1")
def btn2():
lst.append("Button2")
window = tkinter.Tk()
size = str(screensize[0])+'x'+str(screensize[1])
window.geometry(size)
but1 = tkinter.Button(window, text="Button1", command=btn1).grid(column = 1, row = 1)
but2 = tkinter.Button(window, text="Button2", command=btn2).grid(column = 2, row = 1)
ext = tkinter.Button(window, text="Stop", command=closewindow).grid(column = 3, row = 1)
but1.pack()
but2.pack()
ext.pack()
window.mainloop()
Run Code Online (Sandbox Code Playgroud)
回调;
Traceback (most recent call last):
File "C:\Python33\temp.py", line 59, in <module>
but1.pack()
AttributeError: 'NoneType' object has no attribute 'pack'
Run Code Online (Sandbox Code Playgroud)
当你得到一个错误,例如'NoneType' object has no attribute 'X',这意味着你有一个值为的变量None,而你正试图这样做None.X().如果您正在使用tkinter或任何其他包,则无关紧要.所以,你必须问自己,"为什么我的变量有价值None?"
问题是这一行:
but1 = tkinter.Button(window, text="Button1", command=btn1).grid(column = 1, row = 1)
Run Code Online (Sandbox Code Playgroud)
在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)
Run Code Online (Sandbox Code Playgroud)
有了这个,错误就会消失.
但是,你有另一个问题.打电话grid然后打电话pack不会做你认为会做的事情.您只能有一个效果几何管理器在同一时间对于任何给定部件,都grid和pack有几何经理.如果你这样做but1.grid(...),之后but1.pack(...),任何调用的效果grid都将被丢弃,就像你从未调用grid过一样.
您必须决定是否要使用grid,或者是否要使用pack,并且只对根窗口中的所有小部件使用一个或另一个.
| 归档时间: |
|
| 查看次数: |
9469 次 |
| 最近记录: |