gpt4 book ai didi

python - 新窗口是空的

转载 作者:太空宇宙 更新时间:2023-11-03 14:21:36 24 4
gpt4 key购买 nike

我正在尝试在 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()

最佳答案

您在小部件中的父级错误,您可能必须使用 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()

关于python - 新窗口是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47909342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com