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