PyQt5探索-1 开始第一个程序

浅谈PyQt5

PyQt5并不向下兼容PyQt4,主要是由于其有几个较大的改变。虽不兼容,但是旧代码调整到新库并不是很难。它们的主要差异如下:

  1. Python的模块已经重新构建,一些模块已经被放弃,如:QtScript。其他的模块被分割到一些子模块当中,如:QtGui,QtWebkit。
  2. 一些新的模块会推出,如:QtBluetooth,QtPositioning或Enginio。
  3. PyQt5仅支持新型信号和插槽。对SIGNAL()或SLOT()的调用不再支持(这点很重要哦!)。
  4. PyQt5不支持在Qt v5.0中标记为已弃用或过时的Qt API的任何部分。

而Python则不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。一个Python源码文件(.py)除了可以被直接运行外,还可以作为模块(也就是库),被其他.py文件导入。

解析第一个程序

import sys
import untitled
from PyQt5.QtWidgets import QApplication, QMainWindow
if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = untitled.Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

从上到下逐行分析:
1. 引入sys模块
2. 引入ui文件untitled作为模块
3. 引入了PyQt5的QtWidgets模块,在输入.后会自动提示出PyQt5的各种模块,并且明确使用其中的QApplication, QWidget。
4. if __name__ == '__main__':是指name为入口函数时,执行下面的代码,这是为了实现代码的私有化,当本文件作为模块供其他文件调用时,不会执行下面的代码。
5. 每个PyQt5应用程序必须创建一个应用程序对象。 sys.argv参数是来自命令行的参数列表。 Python脚本可以从shell运行。 写了这句话就能让我们的程序从命令行启动。
6. 调用没有父类的QMainWindow构造函数创建对象MainWindow
7. 调用untitled模块的Ui_MainWindow类创建对象ui
8. 调用函数setupUi创建部件
9. 显示窗口, 一个小部件首先在内存中创建,然后在屏幕上显示。
10. app.exec_()是为了进入事件循环,同Qt的QApplication::exec()是一样的。exec_()方法有一个下划线。 这是因为exec是一个Python关键字,为显示区别使用exec_()。但是app.exec()也能使用。sys.exit()方法确保一个干净的退出,换成app.exec()也是可以的。

untitled.py是由PyUIC工具生成的,自己不要去改动。代码就是一个继承自Python类型object的类,类的名称就是设计模式中的顶层对象名称加Ui_前缀,例如Ui_MainWindow,我们称这个类为form类。

类中有个方法为setupUi(),它的参数就是界面类(例如QDialog)的对象。整个代码与Qt中的ui_.h思路基本一样,只是从C++换成了Python。

参考: PyQt5官方对PyUIC的说明

你可能感兴趣的:(PyQt)