我一直在Python3中编程并使用Tkinter来创建GUI。我最近被介绍到PyQT并且意识到GUI工具包在其样式和小部件范围方面有多好。
我主要以程序方式使用Tkinter,它在GUI构建方面运行良好。我意识到PyQT使用OOP范例来创建GUI。
我是否认为以下内容正确描述了tkinter和PyQT在工作方式上有何不同......?
这是对的吗?如果没有,我的理解在哪里出错了? 感谢。
答案 0 :(得分:3)
我只能谈论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应用程序,由许多类组成,这些类可以子组化窗口小部件或包含窗口小部件。
答案 1 :(得分:2)
我感谢你们所有人帮助我理解我理解中的错误。
对于介绍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_())
感谢大家的评论并帮助我实现了我的愚蠢。