当前位置: 首页 > 知识库问答 >
问题:

tkinter“NoneType”对象没有属性“pack”(仍然有效?)[副本]

公良鸿光
2023-03-14

我对Python相当陌生,刚刚开始玩tkinter。运行下面的代码,我得到一个属性错误but1.pack()NoneType对象没有属性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()

回调;

Traceback (most recent call last):
  File "C:\Python33\temp.py", line 59, in <module>
    but1.pack()
AttributeError: 'NoneType' object has no attribute 'pack'

共有2个答案

詹杰
2023-03-14

尝试改变这个:

but1 = tkinter.Button(window, text="Button1", command=btn1).grid(column = 1, row = 1)

变成这样:

but1 = tkinter.Button(window, text="Button1", command=btn1)
but1.grid(column = 1, row = 1)

可能性是。grid()方法不返回值。

微生恩
2023-03-14

当您得到一个错误,如'NoneType'对象没有属性'X',这意味着您有一个变量的值是,并且您正在尝试执行无。X().无论您使用的是tkinter还是任何其他软件包。所以,你必须问自己,“为什么我的变量有值?”

问题是这一行:

but1 = tkinter.Button(window, text="Button1", command=btn1).grid(column = 1, row = 1)

在python中,当您执行foo=x(…)时。y(…)foo将始终具有上次调用的函数的值。在上述情况下,将具有返回的值。网格(列=1,行=1),而grid总是返回None。因此,but1None,因此您得到的“NoneType”对象没有属性“pack”。

因此,最直接的解决办法是将对网格的调用移动到另一行:

but1 = tkinter.Button(window, text="Button1", command=btn1)
but1.grid(column = 1, row = 1)

这样,错误就会消失。

但是,您还有另一个问题。调用grid然后再调用pack并不能实现您所认为的功能。对于任何给定的小部件,一次只能有一个有效的几何体管理器,gridpack都是几何体管理器。如果你做了but1。网格(…) 和更高版本的but1。包装(…),调用grid所产生的任何效果都将被丢弃,就好像您一开始从未调用过grid

您必须决定是要使用网格,还是要使用,并且对根窗口中的所有小部件仅使用一个或另一个。

 类似资料:
  • 如果pk_col值为空,则应打印未定义的主键。但我得到了这个错误。“NoneType”对象没有属性“rdd”。

  • 问题内容: 下面的代码给出了错误: 码: 问题答案: 从代码中,我可以看到你希望允许用户下载pdf。 现在开始 去 http://localhost:5000

  • 问题内容: 我的程序看起来像 当我运行它时,它会抛出我 不知道为什么会这样?当我已经在每个列表的开头创建列表时 问题答案: 实际上,您存储在此处: 更改列表并返回 例:

  • 问题内容: 我遇到了这个问题,我不明白为什么。 我从我的应用程序中获取了代码,并制作了此测试代码,因此您不必费劲地查看我的要求。 我有这个工作在其他代码。但是,在将两者进行比较之后,我无法为自己的一生解决这个问题。 在此应用程序中,出现错误“ AttributeError:’NoneType’对象没有属性’delete’”。 问题答案: 在这一行: grid不返回任何内容,因此entryBox是,

  • 我的模型在Slagify系列中有问题 我试着把代码self.slug=slugify(“slug的测试”)放进去,但问题仍然存在,但当他说保留信息时,没有问题 这是我的错误: 环境: 请求方式:POST请求URL:http://xxx.xx.xx.xx:8000/admin/pages/pages/add/ Django版本:1.7.1 Python版本:3.4.2安装的应用程序:('Django

  • 我遵循项目中给出的所有指示 代码是main.py