Python3.8 tkinter从方法调用新窗口会创建一个空白窗口

Python3.8 tkinter从方法调用新窗口会创建一个空白窗口,python,tkinter,new-window,createwindow,Python,Tkinter,New Window,Createwindow,我试图通过按下现有窗口的按钮来调用新窗口。创建新窗口时,应关闭原始窗口。当我按下按钮时,新窗口将按预期显示,但另外会出现一个空白窗口。使用tk.tk()或tk.Toplevel()将导致相同的结果 稍后在程序中,我想再次销毁创建的窗口。当使用 tk.tk()>代码>时,用鼠标关闭空白窗口,当销毁()/方法应用到新窗口时,将创建一个错误“应用程序已被销毁”。 import tkinter as tk from tkinter import messagebox def main():

我试图通过按下现有窗口的按钮来调用新窗口。创建新窗口时,应关闭原始窗口。当我按下按钮时,新窗口将按预期显示,但另外会出现一个空白窗口。使用
tk.tk()
tk.Toplevel()
将导致相同的结果

稍后在程序中,我想再次销毁创建的窗口。当使用<代码> tk.tk()>代码>时,用鼠标关闭空白窗口,当<代码>销毁()/<代码>方法应用到新窗口时,将创建一个错误“应用程序已被销毁”。

import tkinter as tk
from tkinter import messagebox


def main():

    root = tk.Tk()
    root.title("Hauptmenü")

    Menue = MainMenue(root)
    Menue.pack()

    root.mainloop()


class MainMenue(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)

        self.button_rennen = tk.Button(self, text="New Window", width=20, command=self.call_bet)
        self.button_rennen.pack()

    def call_bet(self):
        self.destroy()
        root2 = tk.Tk()
        Bet = BetFrame(root2)
        Bet.pack()



class BetFrame(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)

        self.button = tk.Button(text="Wette platzieren",
                           command=self.question)

        self.button.pack()


    def question(self):
        dialog = tk.messagebox.askokcancel(message="Destroy Window?")

        if dialog is True:
            self.destroy()


main()
我正在为每个新窗口创建一个新类,因为原始程序应该返回一些变量。 我知道这个话题已经有很多问题了,但对我来说,这些问题似乎都不太合适,也没有一个能帮助我找到解决问题的办法。我非常感谢你的帮助

看看这个:

将tkinter作为tk导入
从tkinter导入消息框
类主菜单(tk.Frame):
定义初始化(自身,父级):
super()。\uuuu init\uuuu(父级)
self.button_rennen=tk.button(self,text=“新窗口”,宽度=20,
命令=自我。呼叫(下注)
self.button_rennen.pack()
def呼叫(自我):
#“赛尔夫。主人”是窗户
Bet=BetFrame(self.master)
Bet.pack()
自我毁灭
类BetFrame(tk.Frame):
定义初始化(自身,父级):
super()。\uuuu init\uuuu(父级)
#你需要告诉按钮,它的主按钮应该是这个框架
#如果你不这样做,它会认为你指的是窗户
#'self.destroy()'不会破坏按钮。
self.button=tk.button(self,text=“Wette platzieren”,command=self.question)
self.button.pack()
问题(自我):
dialog=tk.messagebox.askokcancel(message=“销毁窗口?”)
如果对话框为True:
自我毁灭
def main():
root=tk.tk()
菜单=主菜单(根)
Menue.pack()
root.mainloop()
main()
您的代码很棒,但有两个错误:

  • 与其创建新窗口,不如重用旧窗口
  • BetFrame
    类中创建按钮时,不会向主参数(第一个参数)传递任何内容。这就是为什么当您使用
    self.destroy()

而不是
self.destroy();root2=tk.tk();Bet=BetFrame(root2);Bet.pack()
use
Bet=BetFrame(self.master);Bet.pack();Suffy()/<代码>谢谢,这解决了空白窗口的问题。现在
question()
方法中的
destroy()
函数没有关闭任何内容。如何修复?在
BetFrame
中创建按钮时,需要传递
self
。我会写一个恰当的答案非常感谢。那真的很有帮助!