代码之家  ›  专栏  ›  技术社区  ›  Dave_The_Noob

Tkinter Pyinstaller未加载主程序

  •  0
  • Dave_The_Noob  · 技术社区  · 1 年前

    我有一些tkinter GUI代码,在VS代码中本地启动时运行良好。但是,当我使用Pyinstaller创建.exe时,下面的代码工作正常,但成功登录后,下面的程序调用我的主程序类,无法加载。它只是创建了我的屏幕,用正确的几何图形和背景色,但不是没有我的小工具。

    from config import *
    import base64
    from PIL import ImageTk,Image
    from attribution_tool_main_program_class import main_program
    import pandas as pd
    import os
    import sys
    from sql_uploader import azure_sql_connector
    from tkinter import Tk,Label,Canvas,Entry,Button, messagebox, Toplevel,mainloop
    
    class login_screen_class():
    
        def __init__(self):
    
            self.df  = azure_sql_connector('opr_dev').read_table('SELECT * FROM [dbo].[attribution_username_file]')
            self.root = Tk()
            self.root.withdraw()
            self.login_screen = Toplevel(self.root)
            self.login_screen.title("Attribution Tool - Login")
            self.login_screen.geometry("1920x1080")
            train_icon = self.resource_path('train.ico')
            self.login_screen.iconbitmap(train_icon)
            background_image=self.resource_path('background_image_2.png')
            self.my_img = ImageTk.PhotoImage(Image.open(background_image))
            my_label = Label(self.login_screen,image=self.my_img)
            my_label.grid(row=0,column=0, sticky='N')
            my_canvas1 = Canvas(self.login_screen,bg = "#75787B")
            my_canvas1.grid(row=0,column=0,padx=200,pady=200)
     
            font= "Helvetica, 16"
    
            user_Name = Label(my_canvas1,text="Username",bg = "#75787B", fg="white",font=font)
            user_Name.grid(row=0,column=0,columnspan=2,pady=10,padx=10,sticky='N')
            self.username_entry = Entry(my_canvas1,width =30,bg = "#75787B",font=font,foreground='white')
            self.username_entry.grid(row=1,column=0,padx=10)
            
            password_name = Label(my_canvas1,text="Password",bg = "#75787B", fg="white",font=font,borderwidth=0)
            password_name.grid(row=2,column=0,columnspan=2,pady=10,padx=10)
            self.password_entry = Entry(my_canvas1,width =30,bg = "#75787B",font=font,foreground='white',show='*')
            self.password_entry.grid(row=3,column=0,padx=10)
    
            login_image=self.resource_path('login-button-png-7.png')
            my_img_login = ImageTk.PhotoImage(Image.open(login_image))
            sign_in_button = Button(my_canvas1,image=my_img_login, command = lambda: self.username_password_check(), borderwidth=0)
            sign_in_button.grid(row=4,column=0,columnspan=2, pady=10, padx=10)
            self.login_screen.bind_all("<Return>",self.username_password_check)
            mainloop()
        
        def resource_path(self,relative_path):
            try:
                base_path = sys._MEIPASS
            except Exception:
                base_path = os.path.abspath(".")
    
            return os.path.join(base_path, relative_path)
    
        def username_password_check(self,event=None):
    
            self.username = self.username_entry.get().lower()
            password=self.password_entry.get()
            if self.username =="":
                messagebox.showerror("No username entered", "Please enter a valid username to login to Attribution Tool")
            elif password =="":
                messagebox.showerror("No password entered", "Please enter a valid password to login to Attribution Tool")
    
            login_list =  self.df.values.tolist()
            for record in login_list:
                if record[0].lower() ==self.username:
                    if base64.b64decode(record[1]).decode("utf-8") == password:
                        self.login_screen.withdraw()
                        main_program((self.username).capitalize(),self.root)  
                    else:        
                        messagebox.showerror("Login Error", "The details you have entered are invalid")
                        break
    
    if __name__ == '__main__':
    
        login_screen_class()
    

    下面的命令是我用来将文件导出到.exe的命令

    pyinstaller --name Attribution_tool --onefile --windowed --icon=Train.ico --add-data "login-button-png-7.png;." --add-data "background_image_2.png;." --add-data "train.ico;." Attribution_tool_v19.py
    
    0 回复  |  直到 1 年前
        1
  •  0
  •   Dave_The_Noob    1 年前

    我升级了我的pyinstaller,它解决了这个问题!