PyQT5 速成課程 -
本文版權歸沈清陽所有,轉載請聯系作者! Qt簡介
在PyQt中編寫UI界面可以直接通過代碼實現,也可以通過Qt實現。 Qt的設計符合MVC架構,實現了視圖與邏輯的分離,從而實現了開發的便利性。 Qt中的操作方式非常靈活。 通過拖放放置控件,可以隨時查看控件的效果。 Qt生成的.ui文件(本質上是XML格式文件)也可以通過工具轉換為.py文件。
Qt 與 PyQt5-tools 包一起安裝,其安裝路徑位于“安裝路徑\Lib\site-\pyqt5-tools”下。
如果想啟動Qt,可以直接進入上述目錄,雙擊.exe打開Qt; 或者將上面的路徑添加到環境變量中,在命令行輸入打開; 或將其配置為外部工具以在 .
下面以Qt的配置方法為例進行說明。
PyQt5工具配置在
打開,選擇->工具->工具,點擊左上角綠色加號。
工具
填寫Name(以后使用時,名稱無所謂)。 選擇我們安裝的PyQt5-tools下的.exe。 然后選擇我們的工作目錄。 然后點擊確定,然后添加為外部工具。
然后添加PyUIC(UI轉換工具),PyUIC是.exe,在安裝目錄下的目錄下,同樣將其設置為我們的工作目錄,然后填寫以下代碼:
-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
最后添加pyrcc用于PyQt5的資源文件轉碼。 具體配置同上,填寫:
$FileName$ -o $FileNameWithoutExtension$_rc.py
退出前,單擊“應用”保存配置。 配置完成后,會添加3個工具。
配置工具
點擊打開界面。
Qt 界面簡介
剛打開Qt后,會彈出如下圖所示的窗口。
模板窗口
創建一個新的Form給出了5個模板,其中Main是最常用的。 這里我們選擇創建一個Main。
界面
上述界面最左邊的菜單是Box,它包含了PyQt5中的所有組件。 我們可以將左側的Box中的View、Input等組件拖到中間的窗口中。
點擊Form ->(快捷鍵是Ctrl+R)可以預覽我們設計的界面,也可以使用In選擇在對應的主題風格中預覽。
我們拖動一個Label,進入主窗口(Main)。
主窗口
這時,在右上角(對象查看器)可以看到主窗口中放置的對象(標簽和)及其對應的Qt類。
對象查看器
以標簽為例。 這時候我們點擊Main中的標簽或者選擇Main中的標簽,然后看右邊的一個區域——(屬性編輯器)。
屬性編輯器
其主要屬性如下: 名稱含義
控制對象名稱
對應的寬高和坐標
小部件大小策略
最小寬度和高度
最大寬度和高度
字體
字體
光標
...
...
PS:設置 和 為相同值后,窗口的大小就固定了。
右下部分是(資源瀏覽器),可以添加相應的圖片素材、Label或其他控件的背景圖片等。
資源瀏覽器
Qt 用戶界面文件
使用 Qt 保存的文件是 .ui 格式的文件。
通過保存并用記事本等軟件打開,我們可以看到.ui文件的內容如下:
MainWindow
0
0
800
600
MainWindow
240
80
72
15
TextLabel
240
120
93
28
PushButton
0
0
800
26
從.ui文件的第一行我們可以看出,它的本質是一個XML文件。 主窗口中所有控件的相關屬性都存儲在ui文件中。 使用XML文件來存儲UI文件具有很高的可讀性和可移植性,因此我們可以輕松地將.ui文件轉換為.py文件,以便我們可以使用該語言在設計的GUI上進行編程。
將 .ui 文件轉換為 .py 文件
將 .ui 文件轉換為 .py 文件很容易,我們之前設置了該工具。 如果你沒有在 中設置這個工具,或者根本不使用它,你可以在命令行中使用以下命令將.ui 轉換為.py。
pyuic5 - o 目標文件名.py 源文件名.ui
或者直接在 中,找到.ui文件,右鍵打開菜單,找到Tools->PyUIC。 點擊后,我們會在對應的項目目錄下生成一個.py文件。 (注意.ui文件必須存放在我們Tools中設置的對應工程目錄下)
皮尤卡
轉換完成后,打開.py文件。
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(240, 80, 72, 15))
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(240, 120, 93, 28))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QmetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "TextLabel"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
觀察上面的文件我們可以看出,如果不使用Qt制作界面,我們會一次又一次的調試程序,將按鈕和Label放到合適的位置將是一個極其痛苦的過程。 而通過Qt,我們可以快速制作UI并生成代碼,從而實現快速UI開發。
使用轉換后的.py文件
但是,此時運行轉換后的文件無法顯示任何窗口。 因為這個文件只定義了主窗口及其控件的代碼,并沒有程序入口的代碼。 為了堅持視圖和邏輯分離的原則,我們編寫了一個新的腳本來調用這個文件并創建一個窗口。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from mainWindow import *
class MyWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = MyWindow()
myWin.show()
sys.exit(app.exec_())
通過上面的代碼,我們繼承了該類,使用其構造函數構造了主窗口,定義了程序的入口,并通過創建對象的方式創建了Qt窗口。 其運行結果如下:
Qt窗口
通過以上操作,我們熟悉了從Qt設計界面到業務邏輯實現的一般工作流程。 通過這個工作流程,可以簡化工作,提高速度。
通過將視圖與業務邏輯分離,每次改變Qt的UI設計時都不需要重新編寫代碼,而只需要稍微修改改變的部分。
下一講我們將繼續講解Qt的使用。
如果覺得文筆不錯的話就點個贊吧?~
感謝您的支持!