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

Noe*_*ing 1 python import window interface tkinter

我正在我的程序中创建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()
Run Code Online (Sandbox Code Playgroud)

第二窗口编码:

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()
Run Code Online (Sandbox Code Playgroud)

Ste*_*ers 5

你正在创造额外的Tk窗户.以下是使用Toplevel小部件和其他文件的示例.

mainWindow.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()
Run Code Online (Sandbox Code Playgroud)

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!")
Run Code Online (Sandbox Code Playgroud)

使用其他文件时,请确保没有任何您不想运行的全局代码.你的类没有从继承TkToplevel,这只是一个例子.但是你需要确保你只有一个实例,Tk否则你会得到你遇到的行为