[英]how to remove an extra window in python Tkinter?
M trying to create a desktop app but facing some problem while switching between frames using button. M 试图创建一个桌面应用程序,但在使用按钮在帧之间切换时遇到了一些问题。 Its working all fine but it gives me an extra blank window(consist nothing) when I run my project.它工作得很好,但是当我运行我的项目时,它给了我一个额外的空白窗口(不包含任何内容)。 Below is my code.下面是我的代码。 Please suggest me any changes or error in my code.请向我建议我的代码中的任何更改或错误。
import tkinter as tk
class Toplevel1(tk.Tk):
def __init__(self, top=None, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
top.geometry("600x450+306+137")
top.minsize(120, 1)
top.maxsize(1370, 749)
top.resizable(1, 1)
top.title("New Toplevel")
top.configure(background="#d9d9d9")
self.MenuFrame = tk.LabelFrame(top)
self.MenuFrame.place(relx=0.0, rely=0.0, relheight=0.989, relwidth=0.25)
self.MenuFrame.configure(relief='groove')
self.MenuFrame.configure(foreground="black")
self.MenuFrame.configure(background="#400080")
self.Button1 = tk.Button(self.MenuFrame)
self.Button1.place(relx=0.133, rely=0.067, height=24, width=107, bordermode='ignore')
self.Button1.configure(background="#00ff80")
self.Button1.configure(foreground="#000000")
self.Button1.configure(pady="0")
self.Button1.configure(text='''Button 1''')
self.Button1.configure(command= lambda : self.show_frame(ButtonOne))
self.MainWindow = tk.LabelFrame(top)
self.MainWindow.place(relx=0.267, rely=0.111, relheight=0.767, relwidth=0.7)
self.MainWindow.configure(relief='groove')
self.MainWindow.configure(foreground="black")
self.MainWindow.configure(background="#808040")
self.frames = {}
for F in (StartPage, ButtonOne):
frame = F(self.MainWindow)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
# label of frame Layout 2
# second window frame page1
class ButtonOne(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Button 1 is pressed")
label.pack()
if __name__ == '__main__':
root = tk.Tk()
app = Toplevel1(root)
root.mainloop()
This causes a window to be created:这会导致创建 window:
class Toplevel1(tk.Tk):
def __init__(self, top=None, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
...
...
app = Toplevel1(root)
And this causes a window to be created:这会导致创建 window:
root = tk.Tk()
If you don't want Toplevel1
to be a separate window, don't inherit from tk.Tk
.如果您不希望Toplevel1
成为单独的 window,请不要从tk.Tk
继承。 Instead, you can inherit from tk.Frame
, and then you can call pack
, place
, or grid
to add this to the root window.相反,您可以从tk.Frame
继承,然后您可以调用pack
、 place
或grid
将其添加到根 window。
However, it looks like you're intending for your Toplevel1
to be the true root window, so you can remove root = tk.Tk()
.但是,您似乎打算让您的Toplevel1
成为真正的根 window,因此您可以删除root = tk.Tk()
。 You can then do app.mainloop()
rather than root.mainloop()
You'll also have to make a few other adjustments, such as using self
rather than top
inside Toplevel1.__init__
.然后您可以执行app.mainloop()
而不是root.mainloop()
您还必须进行一些其他调整,例如在Toplevel1.__init__
中使用self
而不是top
。
Put another way, if you want only one window then either inherit from tk.Tk
or create an instance of tk.Tk
, but don't do both.换句话说,如果你只想要一个 window ,那么要么从tk.Tk
继承,要么创建一个tk.Tk
的实例,但不要两者都做。
As on tkinter callbacks, tk.Tk in class Toplevel1
is about the same as Toplevel1=tk.Tk()
which, in a sesne opens a new window.与 tkinter 回调一样, class Toplevel1
中的 tk.Tk 与Toplevel1=tk.Tk()
大致相同,后者在本质上会打开一个新的 Z05B8C74CBD96FBF2DE4C1A352702FFF4 the third line from whitespace, tk.Tk.__init__(self, *args, **kwargs)
, it becomes useless.空格的第三行, tk.Tk.__init__(self, *args, **kwargs)
,它变得没用了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.