Python tkinter - pack append vs pack separate from root

Python tkinter - pack append vs pack separate from root

我是 python 和 tkinter 的新手。尝试编写一个简单的 python 代码来获取用户名并打印它

所以,我尝试了以下

root = Tk() # line 1
e = Entry(root, width = 50).pack() # line 2 option 1 - results in below error as shown below
e = Entry(root, width = 50) # line 2 option 2 - works fine
e.pack() # line 3 option 2 - works fine
def clicking():
    word = "Hello " + e.get()
    myLabel = Label(root,text=word).pack()
myButton = Button(root, text = "Generate", command = clicking).pack()

当我点击 Generate 按钮时,我希望看到类似“Hello John”的输出

但是当我按照上面第 2 行选项 1 所示编写第 2 行时出现以下错误

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\test\Anaconda3\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
  File "C:\Users\test~1\AppData\Local\Temp/ipykernel_8876/988003047.py", line 4, in clicking
    word = "Hello " + e.get()
AttributeError: 'NoneType' object has no attribute 'get'

但是,当我将第 2 行写成两行时,如第 2 行选项 2 和第 3 行选项 2 所示,它工作正常,我得到以下输出。

能帮我理解为什么会这样吗?用root打包和不打包有什么区别?

当你使用

variable = Widget().pack()

然后你将 None 分配给 variable 因为 pack(), grid(), place() return None.

你应该分两行

variable = Widget() 
variable.pack()

第一行将小部件分配给 variable
在第二行中,您使用 variable 访问此小部件。