我正在写一个更友好的GUI应用程序,有一个main.py。在main.py中,我调用了显示不同屏幕的函数。我所有的函数都位于functions.py中。我在main.py中导入了functions.py .
main.py中的代码如下:
from tkinter import *
import tkinter as tk
import functions
functions.login()
functions.login()在提交信息后调用另一个login_click()。如果登录数据正常,gui将显示另一个屏幕-管理屏幕。另一个屏幕也是一个函数admin_screen()。
我试图通过添加一个函数来隐藏第一个屏幕:
def hide_main_screen():
login.forget_pack() #or login.forget()
admin_screen()
在login_click()中像这样调用hide_main_screen():
def login_click():
global name
global password
name=e_usn.get()
password=e_pass.get()
if name=="" or password =="":
messagebox.showwarning('Warning!', 'No data.')
elif name=='admin' and password=='12345':
print('Login OK')
hide_main_screen()
else:
messagebox.showerror('Login Error!', 'Username or password are false.')
我正在尝试进入另一个gui屏幕(管理屏幕)并隐藏第一个(登录屏幕)。
我的错误显示为:
文件"d:PyFlorafunctions.py",第71行,在hide_main_screenlogin.forget_pack ()AttributeError: 'function'对象没有'forget_pack'属性
两件事:
-
您正在寻找隐藏已添加到GUI中的
pack()
几何管理器的小部件的最佳方法是pack_forget()
,而不是forget_pack()
-
pack_forget()
将只工作在tkinter小部件,只有当他们已经pack
ed(即,pack_forget()
不工作与place()
或grid()
添加的小部件)
pack_forget()
不能在你的login
函数上工作,因为它不是一个tkinter小部件。
如果你有一个窗口,你想隐藏,即Toplevel
对象,你可以简单地destroy()
当你不再需要它。如果您有单独的部件,您已经pack
编辑并想要隐藏,您可以使用pack_forget()
。