我编写了一个 2600 行的应用程序,从 IDE 运行时效果很好。现在我通过 Pyinstaller 创建了一个可执行文件,现在 GUI 没有启动。该应用程序启动并迅速消失。我没有收到任何错误(已经解决了),但是这个问题仍然存在。我认为这与mainloop()
我的应用程序中缺少了有关,我不知道如何在这种特殊情况下应用。通常它是这样的:
root = tk.Tk()
root.mainloop()
在我的情况下,我为我的窗口创建了一个类,添加了一个菜单栏和标签作为状态栏(后者未在下面的代码中显示)。这使我将这个类作为 Tk() 分配给main_window
. 我应该在哪里放置mainloop()
而不出错?
我已经尝试过:
main_window.mainloop()
因为 main_window 是放置所有框架的窗口,但随后在 IDE 中出现以下错误:
main_window.mainloop() AttributeError: 'AppWindow' object has no attribute 'mainloop'
如何将 mainloop() 应用到我的应用程序中而不会出现上述错误?或者我如何让我的 GUI 以不同的方式工作?欢迎两个答案。
这是需要了解的代码:
import tkinter as tk
class AppWindow():
def __init__(self, master):
self.master = master
master.title("Basic Application")
master.geometry("1060x680")
master.grid_propagate(False)
#create drop down menu
self.menubar = tk.Menu(master) # main menubar
#Add filemenu
self.filemenu = tk.Menu(self.menubar, tearoff=0) #sub menu
self.filemenu.add_separator() #create a bar in the menu
self.filemenu.add_command(label="Quit", command=master.destroy) #Add submenu item
self.menubar.add_cascade(label="File", menu=self.filemenu) #Add submenu to menubar
self.master.config(menu=self.menubar) #Show menu
class FrameOne(tk.Frame):
def __init__(self, parent):
super().__init__()
self["borderwidth"]=5
self["relief"]="ridge"
self.create_widgets() #Function which creates all widgets
self.position_widgets() #Function which position all widgets
def create_widgets(self): #Function which creates all widgets
pass
def position_widgets(self): #Function which position all widgets
pass
#Create a window as defined in the AppWindow class
main_window = AppWindow(tk.Tk())
#Create a Frame as defined in class FrameOne
first_frame = FrameOne(main_window)
first_frame.grid(row=0, column=0) #Positioning Frame on Window
main_window.mainloop() #THIS PROVIDES AN ERROR | GUI DOES NOT START WITHOUT