我有一个带有 GUI(Tkinter)的程序,我想在其中添加一个登录系统。我在一个单独的库中编写了一个包含多个功能的登录窗口Login_v1。该程序和登录系统运行良好。但是,似乎某个进程在后台运行导致计算机冻结(程序本身除外),而当我分别运行程序或登录库时,它确实运行顺利,而没有在后面运行进程。我认为这与在一个程序中使用两个窗口并从一个窗口到另一个窗口有关,但我不知道如何解决它。
启动主程序它检查是否应该启动登录窗口。启动登录窗口时,它start_application通过 as 命令传递函数以在成功登录的情况下执行。start_application登录窗口将用户名和帐户类型传递给主程序功能。
在这里可以找到主程序代码的相关部分:
import tkinter as tk #GUI Library
import os #For file and directory handling
import Login_v1 as login #Login library
def start_application(Username, User_type):
global mainWindow
global FirstFrame
global SecondFrame
global ThirdFrame
global USERNAME
global USER_TYPE
USERNAME = Username #Received from login
USER_TYPE = User_type #Received from login
load_config_settings() #Load config settings first
load_all_settings(int(FILETYPE_CONFIG)) #Load all settings based on config
root = tk.Tk()
#Create a window as defined in the AppWindow class
mainWindow = AppWindow(root)
#Create a Frame as defined in class MainFrame
FirstFrame = MainFrame(mainWindow)
FirstFrame.grid(row=0, column=1, rowspan=2, sticky="NWES") #Positioning Frame on Window
#Create a Frame as defined in class SearchFrame
SecondFrame = SearchFrame(mainWindow)
SecondFrame.grid(row=0, column=0, sticky="NWES") #Positioning Frame on Window
#Create a Frame as defined in class ScrollFrame
ThirdFrame = ScrollFrame(mainWindow)
ThirdFrame.grid(row=1, column=0, sticky="NWES") #Positioning Frame on Window
root.mainloop()
if __name__ == "__main__":
if os.path.exists(USERS_FILE) == True:
#Start login window
login = login.Login(icon="LegalNotesApp_icon.ico",
users_file=USERS_FILE,
modus="advanced",
command=lambda:start_application(login.username_entry_var.get(), login.account_type))
else:
start_application(Username="Administrator", User_type = "")
在这里您可以找到登录库的相关部分:
class Login(tk.Tk):
def __init__(self,
title="Login",
command="pass",
accounts={},
users_file="",
modus="simple"):
tk.Tk.__init__(self)
self.resizable(0,0) #Window not resizable
self.attributes("-topmost", 1) #Topmost window
self.focus_force()
#Passing through variables
self.command = command #Action when login is succesful
self.title(title) #Title of window
self.users_dict = accounts #Dictonary of users & passes
self.users_file = users_file #File to load/save dictonary of users & passes
self.modus = modus #Account modus: simple, advanced, custom?
def login_event(self, *args):
#Event when login button is pressed
if self.users_dict != {}: #Check whether users are available
#STEP 1: Check for empty fields
if self.username_entry.get() != "" and self.password_entry.get() != "": #check wether username is not empty
#STEP 2: Check for modus: "simple", "advanced", "custom"?
if self.modus == "simple": #MODUS
if self.password_entry.get() == self.users_dict.get(self.username_entry.get()): #Check password
#Succesful login
self.destroy() #Login window not needed after login
self.command() #Action determined by user
是什么导致后台进程?以及如何防止它发生?或者我能做些什么更好?