所以我正在用 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
我什至沒有在我的第二個視窗上放置 Windows 幾何函式,但我仍然遇到相同的錯誤。
uj5u.com熱心網友回復:
您的代碼的第一個問題是您在初始化它們的物件的同一行中對小部件進行打包/網格化,然后將它們保存在一個變數中。像這樣-:
my_p = Label(sw, text=p).pack()
這不會給出所需的結果,因為實際上保存在變數中的內容my_p是None型別,因為它是函式包的回傳值而不是Label物件本身。對此的解決方法是將標簽打包在單獨的行中 -:
my_p = Label(sw, text=p)
my_p.pack()
其次,pack并且grid是不能在同一個父母的小部件可以使用兩種Tkinter的幾何經理。例如,在您的代碼中,問題是對于同一個 parent sw, Labelmy_p正在打包并且許多其他小部件正在網格化。正如所解釋的,tkinter 無法處理同一父級小部件的打包和網格化,因此它會引發錯誤 -:
_tkinter.TclError: 不能在 .!toplevel 中使用幾何管理器包,它已經有由網格管理的從屬
通過將標簽的幾何管理器更改my_p為網格,而不是像這樣 -:
my_p = Label(sw, text=p)
my_p.grid(row = some_row, column = some_column)
問題可以解決。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360446.html
標籤:Python 特金特 小部件 tkinter-入口
