我无法获得我在 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_pNone 类型,因为它是函数包的返回值而不是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 已经有网格管理的从属

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

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

问题可以解决。

【讨论】:

以上是关于我无法获得我在 Tkinter 中的条目的价值 | Python的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 3.8 中的按钮读取 Tkinter 中的条目

如何为 TKINTER 中的条目总和定位 def

从 Tkinter Python 中的浏览按钮设置条目值

如何将文件位置存储到条目窗口小部件中--Tkinter

使用 tkinter 和 db 连接的 Python GUI

Tkinter 无法从条目中解码表情符号