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 次 |
最近记录: |