将窗口定义为类,但无法调用mainloop函数

时间:2019-07-14 07:38:35

标签: python class tkinter

我非常讨厌编码,所以我不知道如何利用类来制作很酷的东西:(--我真的是GUI开发的新手,我正在尝试制作一个简单的带有关卡的迷宫游戏我已经迷宫了,但是显然Tkinter绝望了,因为我一直在最后一个小时里一直在努力寻找在线解决方案。您可能已经注意到,这是我在这里的第一篇文章。 / p>

我正在Windows 10上使用像样的计算机在PyCharm中运行此程序。由于某些原因,我无法安装任何库/无法使用列表中明确安装的任何库,因此在此IDE上尤其如此图书馆...但这是另一篇文章。正如我所提到的,过去一个小时我一直在尝试找出一个简单的程序,但是似乎没有任何效果。

我在网上发现的任何东西也没有什么特别有用的,而且那些可能是如此的复杂以至于我无法理解他们正在努力实现的目标。我正在寻找一个简单问题的简单解决方案,希望这个伟大的社区能够为我提供帮助。

import tkinter as tk


class Window():
    def __init__(self):
        self = tk.Tk()
        self.geometry("%dx%d+0+0" % (1920,1080))


root = Window()

root.mainloop()

预期:出现窗口 观察到:程序突然结束

Error:
Traceback (most recent call last):
  File "C:/Users/(GD) ShadowPlague/PycharmProjects/GameDesign/Main.py", line 12, in <module>
    root.mainloop()
AttributeError: 'Window' object has no attribute 'mainloop'

1 个答案:

答案 0 :(得分:1)

您以错误的方式创建了类。您无法将Tk()分配给self才能正确创建类。外部root与内部self无关。首先,您创建实例Window()并分配给变量root,但随后您创建实例Tk()并分配给self,但它不会更改分配给root的实例。


第一种方法:在类内部以Tk()创建self.root,然后使用win.root

import tkinter as tk

class Window():

    def __init__(self):
        self.root = tk.Tk()
        self.root.geometry("%dx%d+0+0" % (1920,1080))

win = Window()

win.root.mainloop()

第二种方法:从Tk()继承。它需要Window(tk.Tk)super().__init__

import tkinter as tk

class Window(tk.Tk):

    def __init__(self):
        super().__init__()
        self.geometry("%dx%d+0+0" % (1920,1080))

root = Window()

root.mainloop()