我无法在 Tkinter 中获得我的条目的价值 | Python

I cannot get the value of my Entry in Tkinter | Python

所以我正在使用 tkinter 制作这个 GUI 应用程序,我们可以在其中注册和登录并保存我们的数据。我在从注册部分的条目小部件获取值时遇到问题。

from tkinter import *

##### CONSTANTS ############
m = Tk()
m.title("Info storage")
m.geometry("500x500")
############################

def signup():
    sw = Toplevel()
    sw.title("Sign Up")


    signup_head = Label(sw, text="Sign Up over here!", font=font1, padx=180).grid(row=0, column=0)

    username_text = Label(sw, text="Username", font=font2, pady=40).grid(row=1, column=0)
    username = Entry(sw, width=40)
    password_text = Label(sw, text="Password", font=font2, pady=10).grid(row=3, column=0)
    password = Entry(sw, width=40)
    re_password_text = Label(sw, text="Re-type your password", font=font2, pady=10).grid(row=5, column=0)
    re_password = Entry(sw, width=40)
    useless = Label(sw, text=" ", pady=50).grid(row=7, column=0)


    username.grid(row=2, column=0)
    password.grid(row=4, column=0)
    re_password.grid(row=6, column=0)
    

    def signup_work():
        p = password.get()
        my_p = Label(sw, text=p).pack()


    go_btn = Button(sw, text="GO", width=20, command=signup_work).grid(row=8, column=0)



title = Label(m, text="Login or Signup to start storing your info!", width=50, height=3, font=font1).grid(row=0, column=0)
signup_button = Button(m, text="Sign Up", command=signup).grid(row=1, column=0)

m.mainloop()

这是我遇到的错误

Exception in Tkinter callback
Traceback (most recent call last):                                                                                        
File "F:\software\Python 3.9.7\lib\tkinter\__init__.py", line 1892, in __call__                                           
return self.func(*args)                                                                                               
File "D:\Programming\Python\Tkinter\info-storage\main.py", line 38, in signup_work                                        
my_p = Label(sw, text=p).pack()                                                                                       
File "F:\software\Python 3.9.7\lib\tkinter\__init__.py", line 2396, in pack_configure                                     
self.tk.call(                                                                                                       
_tkinter.TclError: cannot use geometry manager pack inside .!toplevel which already has slaves 
managed by grid            

我什至没有在我的第二个 window 上放置 windows 几何函数,但我仍然遇到同样的错误。

您的代码的第一个问题是您 packing/gridding 小部件在初始化它们的对象的同一行中,然后将它们保存在一个变量中。 像这样-:

my_p = Label(sw, text=p).pack()

这不会给出预期的结果,因为实际保存在变量中的内容例如此处 my_pNone 类型,因为它是 return 的值函数包而不是 Label 对象本身。 对此的解决方法是将 Label 打包在单独的一行中 -:

my_p = Label(sw, text=p)
my_p.pack()

其次,packgrid 是两个 tkinter 几何管理器,不能在同一父级的小部件上使用。 例如,在您的代码中,问题是对于同一个父级 sw,标签 my_p 被打包并且许多其他小部件被网格化。 正如解释的那样,tkinter 无法处理同一父级的小部件的打包和网格化,因此它会抛出错误 -:

_tkinter.TclError: cannot use geometry manager pack inside .!toplevel which already has slaves managed by grid

通过将标签 my_p 的几何管理器更改为网格而不是像这样 -:

my_p = Label(sw, text=p)
my_p.grid(row = some_row, column = some_column)

问题可以解决。