我无法获得我在 Tkinter 中的条目的价值 | Python
Posted
技术标签:
【中文标题】我无法获得我在 Tkinter 中的条目的价值 | Python【英文标题】:I cannot get the value of my Entry in Tkinter | Python 【发布时间】:2021-12-29 03:14:05 【问题描述】:所以我正在使用 tkinter 制作这个 GUI 应用程序,我们可以在其中注册和登录并保存我们的数据。我在从注册部分的 Entry 小部件中获取值时遇到问题。
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
我什至没有在我的第二个窗口上放置一个窗口几何函数,但我仍然得到同样的错误。
【问题讨论】:
【参考方案1】:您的代码的第一个问题是您在初始化它们的对象的同一行中打包/网格化小部件,然后将它们保存在变量中。 像这样-:
my_p = Label(sw, text=p).pack()
这不会给出想要的结果,因为实际上保存在变量中的内容例如这里的my_p
是None
类型,因为它是函数包的返回值而不是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 已经有网格管理的从属
通过将标签my_p
的几何管理器更改为网格,而不是像这样 -:
my_p = Label(sw, text=p)
my_p.grid(row = some_row, column = some_column)
问题可以解决。
【讨论】:
以上是关于我无法获得我在 Tkinter 中的条目的价值 | Python的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python 3.8 中的按钮读取 Tkinter 中的条目