新窗口是空的

问题描述 投票:1回答:1

我想在python3中学习tkinter。由于某些原因,新窗口为空(文件>新测试),我不明白为什么。没有关于错误的消息。我想这与pack()有关,但文档说Toplevel不需要pack()。您能否告诉我如何在新窗口中显示内容。

import tkinter as tk
import sys

class MenuBar(tk.Menu):
    def __init__(self, master):
        tk.Menu.__init__(self, master)

        fileMenu = tk.Menu(self, tearoff=0)
        self.add_cascade(label="File", underline=0, menu=fileMenu)
        fileMenu.add_command(label="Exit", underline=1, command=self.quit)
        fileMenu.add_command(label="Start Test", underline=1, command=self.start_test)

    def quit(self):
        sys.exit(0)

    def start_test(self):
        self.app = RunTestWindow(self)

class MainWindow(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

        self.master.title("Quiz")

        self.menubar = MenuBar(self)
        self.master.config(menu=self.menubar)

        self.button1 = tk.Button(self)
        self.button1['text'] = "Hello!"
        self.button1.grid(row=2, column=0)

        self.canvas = tk.Canvas(self, bg="white", width=400, height=400,
            bd=0, highlightthickness=0)
        self.canvas.grid(row=3, column=0)

class RunTestWindow(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

        self.window = tk.Toplevel(self)

        self.label = tk.Label(self, text="Show me my new window")
        self.label.grid(row=1, column=0)


root = tk.Tk()
mw = MainWindow(root)
mw.pack()
root.mainloop()
python python-3.x tkinter
1个回答
1
投票

你在小部件中有错误的父母,你可能不得不使用pack()在窗口中显示框架。

您可以通过多种方式更改它,但您可以像创建主窗口一样进行更改。

def start_test(self):
    self.subwindow = tk.Toplevel(self)
    self.app = RunTestWindow(self.subwindow)
    self.app.pack()

然后在课堂上你不需要Toplevel()

class RunTestWindow(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

        self.label = tk.Label(self, text="Show me my new window")
        self.label.grid(row=1, column=0)

顺便说一句:关闭它你需要在主窗口

self.subwindow.destroy()

或者在RunTestWindow()

self.master.destroy()

例如

class RunTestWindow(tk.Frame):

    def __init__(self, master):
        tk.Frame.__init__(self, master)

        self.label = tk.Label(self, text="Show me my new window")
        self.label.grid(row=1, column=0)

        self.button = tk.Button(self, text="Close", command=self.master.destroy)
        self.button.grid(row=2, column=0)

完整的工作代码

import tkinter as tk
import sys


class MenuBar(tk.Menu):

    def __init__(self, master):
        tk.Menu.__init__(self, master)

        fileMenu = tk.Menu(self, tearoff=0)
        self.add_cascade(label="File", underline=0, menu=fileMenu)
        fileMenu.add_command(label="Exit", underline=1, command=self.quit)
        fileMenu.add_command(label="Start Test", underline=1, command=self.start_test)

    def quit(self):
        sys.exit(0)

    def start_test(self):
        self.subwindow = tk.Toplevel(self)
        self.app = RunTestWindow(self.subwindow)
        self.app.pack()


class MainWindow(tk.Frame):

    def __init__(self, master):
        tk.Frame.__init__(self, master)

        self.master.title("Quiz")

        self.menubar = MenuBar(self)
        self.master.config(menu=self.menubar)

        self.button1 = tk.Button(self)
        self.button1['text'] = "Hello!"
        self.button1.grid(row=2, column=0)

        self.canvas = tk.Canvas(self, bg="white", width=400, height=400,
            bd=0, highlightthickness=0)
        self.canvas.grid(row=3, column=0)


class RunTestWindow(tk.Frame):

    def __init__(self, master):
        tk.Frame.__init__(self, master)

        self.label = tk.Label(self, text="Show me my new window")
        self.label.grid(row=1, column=0)

        self.button = tk.Button(self, text="Close", command=self.master.destroy)
        self.button.grid(row=2, column=0)


root = tk.Tk()
mw = MainWindow(root)
mw.pack()
root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.