Skip to main content
 首页 » 编程设计

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

2025年05月04日116jpfss

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

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

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

  • 使用 Tkinter,您生成一个窗口对象,然后创建小部件对象(按钮、标签等)(所有这些小部件都是单独的对象),每次将它们放在窗口上时,就像在一张纸上粘贴不同的图片一样, 这就是您可以以程序化方式创建 tkinter GUI 的原因。
  • 然而,使用 PyQT,您可以用相同的方式生成一个窗口对象,但是如果您希望小部件出现在窗口对象上,您不需要像使用 Tkinter 那样单独创建它们并将它们“粘在上面”。相反,您必须为您的窗口对象创建一个新类(蓝图),从 PyQT 父类继承各种小部件,创建这些小部件(对象)并将它们构建到您的新类中(作为属性),以便在您实例化您的window 对象,它带有在窗口的自定义类中设置的所有小部件。这就是 为什么 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 应用程序,由许多类组成,这些类要么是小部件的子类,要么包含小部件。