我无法在 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_p
是 None
类型,因为它是 return 的值函数包而不是 Label
对象本身。
对此的解决方法是将 Label 打包在单独的一行中 -:
my_p = Label(sw, text=p)
my_p.pack()
其次,pack
和 grid
是两个 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)
问题可以解决。
所以我正在使用 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_p
是 None
类型,因为它是 return 的值函数包而不是 Label
对象本身。
对此的解决方法是将 Label 打包在单独的一行中 -:
my_p = Label(sw, text=p)
my_p.pack()
其次,pack
和 grid
是两个 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)
问题可以解决。