不明白为什么会有额外的风

2024-06-08 09:09:42 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我有两个tkinter,一个使用class,另一个没有类。一切都应该是一样的,但是当我使用“类”时,它会创建两个窗口,一个是我实际创建的窗口,另一个是我不知道它来自何处(可能是因为我同时使用了Frametk.Tk,但是没有类它就不能工作)

import tkinter as tk


window = tk.Tk()
framer = tk.Frame(window)
window.title("Test")
window.geometry("720x480+360+240")
window.mainloop()

上面是没有课的。 下面这张是有课的

try:
        import tkinter as tk
except ImportError: #2.x
        import Tkinter as tk


class typtolator(tk.Tk):
        def __init__(self, *args, **kwargs):
                tk.Tk.__init__(self, *args, **kwargs)
                window = tk.Tk()
                framer = tk.Frame(window)
                window.title("Typtolator")
                window.geometry("720x480+360+240")



app = typtolator()
app.mainloop()

Tags: importselftitleinittkinteraswindowframe
2条回答

你得到两个窗口,因为你创建了两个窗口

第一个窗口是app,是typtolator的一个实例。这个类是tk.Tk的一个子类,因此是一个tk.Tk

第二个窗口是window,它是在创建app时创建的tk.Tk的实例

解决方法是这样或那样:子类tk.Tk,或者不创建子类,然后显式创建tk.Tk的实例

正如@Bryan Oakley在他的回答中指出的,问题是类是一个tk.Tk,因为它是从一个派生的,所以额外的窗口是因为它在__init__()方法中创建了第二个纯tk.Tk实例

他漏掉的是一个正确操作的例子,我认为这可能很重要,如下所示:

try:
    import tkinter as tk
except ImportError: #2.x
    import Tkinter as tk


class Typtolator(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)  # Call superclass' __init__().
        framer = tk.Frame(self)
        self.title("Typtolator")
        self.geometry("720x480+360+240")


app = Typtolator()
app.mainloop()

相关问题 更多 >