为什么 Tkinter 可以是程序化的,而 PyQt 只能与 OO 范式一起使用?

Why Tkinter can be procedural and PyQt can only be used just with the OO paradigm?

我一直在 Python3 编程并使用 Tkinter 创建 GUI。我最近接触了 PyQT,并意识到 GUI 工具包在其样式和小部件范围方面要好得多。

我主要以程序方式使用 Tkinter,它在 GUI 构建方面运行良好。我意识到 PyQT 使用 OOP 范例来创建 GUI。

我是否认为以下内容正确描述了 tkinter 和 PyQT 在工作方式上的不同...?

这是正确的吗?如果不是,我的理解哪里出了问题? 谢谢。

我只能说tkinter,但是两种模式都有用。过程代码对于使用最少的样板进行探索很有用。例如,在 运行 之后来自空闲编辑器的以下内容(故意没有 mainloop() 调用)

from tkinter import *
from tkinter.font import Font

root = Tk()
spin = Spinbox(root, from_=0, to=9, width=3,
               font=Font(family='Helvetica', size=36, weight='bold'))
spin.pack()

我可以交互式地尝试更改 spin 的属性,例如输入

>>> spin['fg'] = 'red'
>>> spin['fg'] = 'blue'
>>> spin['justify'] = 'right'

然而,对于任何复杂的成品应用程序,我认为最好将 gui 设置代码放在一个或多个 类 的一个或多个方法中。例如,Idle,一个 tkinter 应用程序,由许多 类 组成,它们要么是小部件的子类,要么包含小部件。

感谢大家帮助我理解我理解中的错误。

对于任何其他被介绍到 PyQt(在来自 tkinter 背景之后)并阅读说明 PyQt 需要 OOP 方法的教程的人,以下两个相同的程序表明情况并非如此(尽管,很明显, 要构建大型应用程序,建议采用 OOP 方法。

程序 PyQt:

import sys
from PyQt5.QtWidgets import (QWidget, QToolTip,
    QPushButton, QApplication)
from PyQt5.QtGui import QFont

app = QApplication(sys.argv)

w = QWidget()

QToolTip.setFont(QFont('SansSerif', 10))
w.setToolTip('This is a <b>QWidget</b> widget')

btn = QPushButton('Button', w)
btn.setToolTip('This is a <b>QPushButton</b> widget')
btn.resize(btn.sizeHint())
btn.move(50, 50)

w.setGeometry(300, 300, 300, 200)
w.setWindowTitle('Tool Tips')
w.show()

sys.exit(app.exec_())

OOP PyQt:

import sys
from PyQt5.QtWidgets import (QWidget, QToolTip,
    QPushButton, QApplication)
from PyQt5.QtGui import QFont


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        QToolTip.setFont(QFont('SansSerif', 10))

        self.setToolTip('This is a <b>QWidget</b> widget')

        btn = QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Tooltips')
        self.show()

app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

谢谢大家的评论,让我认识到自己的愚蠢。