QT是一个跨平台C++图形用户界面应用程序开发框架。
PyQt是python语言和QT的成功融合。PyQt实现了一个python的模块集,它有超过300个类,将近6000个函数和方法,是一个多平台的工具包,可以允许在所有主要的操作系统上。
因为PyQt中可用的类很多,它们被分成了几个模块:
QtCore:包含核心的非GUI相关的类,如信号、时间、文件和目录、各种数据类型、流、网址、MIME类型、线程等
QtWidgets:包含图形组件相关的类,例如按钮、窗体、状态栏、工具栏、滚动条、布局等
QtGui:提供了用于窗口系统集成、事件处理、OpenGL和OpenGL ES集成、2D图形、基本成像、字体和文本的类。这些类由Qt的用户界面技术内部使用,也可以直接使用,例如使用低级OpenGL ES图形API编写应用程序。
QtCore和QtWidgets应该算是后面会用的最多的模块了,在一个GUI程序中,一个窗口说白了就是通过N个widget堆集起来的,然后加上相应的业务逻辑,widget就从QtWidgets中取,相关逻辑需要的类就从QtCore中取。
在一个GUI程序中,这是核心的两个概念。可以简单的说,一个GUI程序就是一个包含N个窗口的应用。
在PyQt中QApplication是应用,QWidget是窗口。
QApplication继承自QGuiApplication,专门为QGuiApplication提供基于QWidget的应用程序所需的一些功能,处理特定于QWidget的初始化。
对于任何使用Qt的GUI应用程序,无论应用程序在任何给定时间是否具有0、1、2或更多窗口,都有且只有一个QApplication对象。对于非基于QWidget的Qt应用程序,请改用QGuiApplication,因为它不依赖于QtWidgets库。
一些GUI应用程序提供了一种特殊的批处理模式,即在没有手动干预的情况下为执行任务提供命令行参数。在这种非GUI模式下,实例化一个普通的QCoreApplication通常就足够了,以避免不必要地初始化图形用户界面所需的资源。
QApplication的主要职责范围是:
它使用用户的桌面设置初始化应用程序,如palette()、font()和doubleClickInterval()。它会跟踪这些属性,以防用户全局更改桌面,例如通过某种控制面板。
它执行事件处理,这意味着它从底层窗口系统接收事件,并将它们分派到相关的小部件。通过使用sendEvent()和postEvent(),您可以将自己的事件发送到小部件。
它解析常见的命令行参数,并相应地设置其内部状态。
它定义了应用程序的外观,并将其封装在一个QStyle对象中。这可以在运行时使用setStyle()进行更改。
它提供了用户可以通过translate()看到的字符串的本地化。
它提供了一些好用的对象,比如desktop()和clipboard()。
它知道应用程序的窗口。您可以使用widgetAt()询问哪个小部件位于某个位置,获取topLevelWidgets()和closeAllWindows()的列表,等等。
它管理应用程序的鼠标光标处理。
QWidget是用户界面的基石,它从窗口系统接收鼠标、键盘和其他事件,并在屏幕上绘制自己。每个QWidget都是矩形的,并且按照Z-order进行排序。
未嵌入父QWidget的QWidget称为窗口。通常,窗口有一个窗体和一个标题栏,当然也可以使用合适的window flags创建只有纯窗体的窗口。在Qt中,QMainWindow和QDialog的各种子类是最常见的窗口类型。
QWidget是所有其他界面组件的父类。
下面是一个最简单的GUI程序代码:
from sys import argv, exit
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
app = QApplication(argv)
main_window = QWidget()
main_window.show()
exit(app.exec_())
代码说明:
app = QApplication(argv) :根据命令行参数实例化一个QApplication
main_window = QWidget():
main_window.show() : 创建一个窗口并显示
app.exec_() :执行应用的主循环
exit() : 退出GUI程序
这里说下app.exec()和app.exec_()的区别:
在 Python 3 之前,exec是个保留的关键字,因此 PyQt 开发人员为其添加了下划线。从 Python 3 开始,exec不再是关键字了,因此在 PyQt5 中提供不带下划线的版本以与 C++ 文档保持一致是有意义的,但保留exec_()以实现向后兼容性。所以对于带有 Python 3 的 PyQt5,exec()和exec_()是相同的。对于较旧的 PyQt,只有exec_()可用。
对最新版的PyQt5,QT Designer是不在pyqt5包里面的,需要再单独安装pyqt5-tools包
最新版已经没有designer.exe了,而是pyqt5-tools.exe,带参数designer,启动的就是QT Designer了。
这里对$ProjectFileDir$做下说明:
这是PyCharm的内置变量,我们点击第6步的 +,就会出现以下界面
每个变量代表什么都有说明。
pyuic的作用是把QT Designer生成的ui文件转换成py文件,具体配置步骤如下
这个工具并不是一个独立的exe,其实是用python执行PyQt5.uic.pyuic模块,整个命令格式是:
python -m PyQt5.uic.pyuic xxx.ui -o xxx.py
所PyCharm中配置的完整参数就是:
-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py