Skip to main content
 首页 » 编程设计

python之导入一个 python 文件,在单击主窗口按钮时创建一个窗口

2025年05月04日27飞鱼

我在我的程序中创建了 2 个窗口并且我使用了两个类,因为代码很复杂,我将它分开在 2 个不同的 python 文件中。在我导入第二个窗口文件后,如何确保它打开时不会出现此图片中显示的错误

点击新窗口按钮后的原始结果应该是这样的:

主窗口编码:

from tkinter import * 
import classGUIProgram 
class Window(Tk): 
    def __init__(self, parent): 
        Tk.__init__(self, parent) 
        self.parent = parent 
        self.initialize() 
 
    def initialize(self): 
        self.geometry("600x400+30+30") 
        self.wButton = Button(self, text='newWindow', command =     self.OnButtonClick) 
        self.wButton.pack() 
 
    def OnButtonClick(classGUIProgram): 
        classGUIProgram.top = Toplevel() 
        master = Tk() 
        b = classGUIProgram.HappyButton(master) 
        master.mainloop() 
if __name__ == "__main__": 
    window = Window(None) 
 
    window.title("title") 
 
    window.mainloop() 

第二个窗口的编码:

from tkinter import * 
class HappyButton: 
    def __init__(self, master): 
        frame = Frame(master) 
        frame.pack() 
        self.printButton = Button(frame, text="Print message", command=self.printMessage) 
        self.printButton.pack(side=LEFT) 
 
        self.quitButton = Button(frame, text="Quit", command= quit) 
        self.quitButton.pack(side=LEFT) 
 
        self.downloadHistoryCB=Checkbutton(frame, text="Download History") 
        self.downloadHistoryCB.pack(side=LEFT) 
 
    def printMessage(self): 
        print("Wow this actually worked!") 
 
master = Tk() 
b = HappyButton(master) 
master.mainloop() 

请您参考如下方法:

您正在创建额外的 Tk 窗口。这是使用 Toplevel 小部件和另一个文件的示例。

主窗口.py

import tkinter as tk 
import secondWindow as sW 
 
class MainWindow(tk.Tk): 
    def __init__(self): 
        super().__init__() 
        self.title("Main Window") 
        self.geometry("600x400+30+30") 
 
        tk.Button(self, text = "New Window", command = self.new_window).pack() 
        tk.Button(self, text = "Close Window", command = self.close).pack() 
 
        self._second_window = None 
 
    def new_window(self): 
        # This prevents multiple clicks opening multiple windows 
        if self._second_window is not None: 
            return 
 
        self._second_window = sW.SubWindow(self) 
 
    def close(self): 
        # Destory the 2nd window and reset the value to None 
        if self._second_window is not None: 
            self._second_window.destroy() 
            self._second_window = None 
 
 
if __name__ == '__main__': 
    window = MainWindow() 
    window.mainloop() 

secondWindow.py

import tkinter as tk 
 
class SubWindow(tk.Toplevel): 
    def __init__(self, master): 
        super().__init__(master) 
 
        self.title("Sub Window") 
        self.geometry("400x300+30+30") 
        # Change what happens when you click the X button 
        # This is done so changes also reflect in the main window class 
        self.protocol('WM_DELETE_WINDOW', master.close) 
 
        tk.Button(self, text = "Print", command = self.printMessage).pack() 
 
    def printMessage(self): 
        print("Wow this actually worked!") 

当使用另一个文件时,请确保没有任何您不想运行的全局代码。您的类不必继承自 Tk 和 Toplevel,这只是一个示例。但是你需要确保你只有一个 Tk 实例,否则你会得到你遇到的行为