Tkinter 中的基本 OOP

Posted

技术标签:

【中文标题】Tkinter 中的基本 OOP【英文标题】:Fundamental OOP in Tkinter 【发布时间】:2020-09-22 21:09:54 【问题描述】:

我对 OOP 比较陌生,因此理论上了解它。我需要在 Tkinter 中实施一个项目。所以,我正在经历它。我只是在玩最基本的代码,如下所示

# https://python-textbok.readthedocs.io/en/1.0/Introduction_to_GUI_Programming.html
import tkinter as tk

class MainApplication(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)
        self.parent = parent


root = tk.Tk()
app = MainApplication(root)
app.mainloop()

在这里,我可以自信地说MainApplication 继承了 tk.Frame。所以,root 是一个TK object,它在MainApplication constructor 中传递,将其分配为MainApplication 对象的parent

所以,当我们调用app.mainloop() 时,MainApplication object 会被调用,这反过来又可以以某种方式调用root,因为我们将root 作为parentapp object

如果我理解错了,请纠正我。

现在,当我浏览时,人们正在使用的另一种流行方法是

# https://docs.python.org/2/library/tkinter.html#a-simple-hello-world-program
import tkinter as tk

class MainApplication(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)
        self.parent = parent


root = tk.Tk()
MainApplication(root)
root.mainloop()

在这里,据我所知,MainApplication 被调用,root 成为它的parent。但是如何链接 MainApplication objectroot object,以便在调用root.mainloop() 时,它可以引用回MainApplication object? p>

感谢任何帮助。提前致谢。

【问题讨论】:

【参考方案1】:

这更多是关于tkinter 模块的实际结构,而不是关于OOP 原则。

mainloopMisc 类的一个方法,它是TkFrame 的祖先。调用时,它本质上是使用对根 Tk 对象的引用来调用 mainloop 方法,因此无论您是从 root 还是 app 调用它,结果都是一样的。

【讨论】:

以上是关于Tkinter 中的基本 OOP的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib 在 tkinter 画布中的缩放功能

为啥我在 Tkinter 中的饼图不显示?

PythonのTkinter基本原理 - 小白篇

PythonのTkinter基本原理 - 小白篇

tkinter:在窗口中显示时间

python tkinter 基本使用