Python:如何在使用单独的登录窗口tkinter时在后台删除进程

问题描述

我有一个带有GUI(Tkinter)的程序,我想在其中添加登录系统。我在一个单独的库Login_v1中编写了一个具有多个功能登录窗口。该程序和注销系统运行良好。但是,似乎某个进程正在后台运行,导致计算机死机(程序本身除外),而当我分别运行两个程序或登录库时,它确实运行得很顺利,而无需在后面运行进程。我认为这与在一个程序中使用两个窗口并从一个窗口转到另一个窗口有关,但我不知道如何解决

启动主程序,它检查是否应启动登录窗口。启动登录窗口时,它将成功通过函数start_application作为命令传递,以在成功登录后执行登录窗口传递到主程序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,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
                    

什么原因导致后台进程?以及如何防止它发生?还是我能做得更好?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)