PyQt5初探 - 一個簡單的例程
- 引言
- 一、安裝配置
- 二、使用
- 2.1 PyQt5簡單例程
- 2.2 與c++ Qt深入對比
- 三、相關教程
引言
PyQt5
是一個比較流行的Python圖形用戶界面(GUI)庫,它基于Qt庫(一個跨平臺的C++庫,用于開發應用程序的圖形界面)為Python開發者提供了一個強大的工具,用于創建專業的GUI應用程序,而無需深入了解底層的C++編程。
- 其與Qt (c++)相比,主要的優缺點如下:
–PyQt5優點
:較高的開發效率和易用性,語法相對簡單,python有意思的第三方庫很多,可直接拿來用
–PyQt5缺點
:較低的運行效率,特別是進行打包封裝成可執行文件,體積很難縮小,進一步降低了運行效率
感覺也是python相比c++的優缺點…
一、安裝配置
網上教程很多,可參考如下博文:
python pyqt5+vtk安裝以及配置采坑記錄:https://blog.csdn.net/qq_38204686/article/details/123445607
PyQt5實現多文件調用以及UI和邏輯分離:https://zhuanlan.zhihu.com/p/95082345
二、使用
- 程序運行如上圖所示,源碼如下所示:
2.1 PyQt5簡單例程
-
- 本例程代碼結構如下所示,其中
main.py
存放主函數,也是程序入口;main.py會調用MainWindow.py
,里面存放主窗體相關函數;MainWindow.py會調用ui_MainWindow.py
,里面是主窗體的界面設計;而ui_MainWindow.py是由designer.exe
設計的MainWindow.ui
使用pyuic5.exe
生成的。(類似QtCreator的界面和邏輯分離)
- 本例程代碼結構如下所示,其中
-
main.py
,創建一個主窗體并顯示
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from MainWindow import MainWindow
import sysif __name__ == '__main__':app = QApplication(sys.argv)mainWindow = MainWindow()mainWindow.show()sys.exit(app.exec_())
-
MainWindow.py
,界面初始化,設置主窗體標題為"Title"
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from ui_MainWindow import Ui_MainWindow
import osclass MainWindow(QMainWindow):ui = Nonedef __init__(self, parent=None):super(MainWindow, self).__init__(parent)# 0. 界面初始化self.ui = Ui_MainWindow()self.ui.setupUi(self)self.setWindowTitle("Title")
-
ui_MainWindow.py
,由MainWindow.ui
生成的py文件,供其他py調用,其在Qt designer中的顯示和內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>799</width><height>620</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralwidget"><layout class="QGridLayout" name="gridLayout_2"><item row="0" column="0"><widget class="QLabel" name="label"><property name="text"><string>我是個標題</string></property><property name="alignment"><set>Qt::AlignCenter</set></property></widget></item></layout></widget><widget class="QMenuBar" name="menubar"><property name="geometry"><rect><x>0</x><y>0</y><width>799</width><height>26</height></rect></property></widget><widget class="QStatusBar" name="statusbar"/></widget><resources/><connections/>
</ui>
2.2 與c++ Qt深入對比
本文python使用的PyQt仿照了c++ Qt的結構,但還是略有不同:
-
- 文件結構
兩者類似,都有main作為程序入口,只不過python沒有.h和.cpp之分,c++還多了pro文件配置編譯參數。兩者的.ui文件一致,python的需要轉為.py文件被調用,而c++的會自動生成ui_mainwindow.h
被.cpp文件調用,如下圖所示 (Qt creator會自動生成,VS好像還需要配置),保持之前使用c++ Qt的習慣,我將python下.ui文件轉成的.py文件之前也增加了ui_
。
- 文件結構
-
ui_mainwindow.h
與ui_MainWindow.py
setupUI
函數一致,都要傳遞一個QMainWindow,然后對其進行修改。c++ Qt調用時候默認是給.h添加一個界面私有變量,然后.cpp調用其setupUI
函數,傳入類本身 (this指針)進行界面繪制。python也是類似的用法,看到有一篇博客沒有new 一個Ui_MainWindow
,而是直接繼承Ui_MainWindow
,都能調用其setupUI
函數。
了解其UI文件生成以及調用的邏輯,自己直接在.py文件里寫代碼亦可。相比c++會靈活一些,畢竟沒有私有變量。
三、相關教程
The complete PyQt5 tutorial — Create GUI applications with Python: https://www.pythonguis.com/pyqt5-tutorial/
PyQt5文檔: https://www.riverbankcomputing.com/static/Docs/PyQt5/index.html#