pyqt5 designer安裝步驟


 design 需要單獨安裝。 直接用pip3 install PyQt5-tools會提示找不到安裝文件。

https://github.com/altendky/pyqt5-tools/releases/tag/v5.7.dev1

pip install PyQt5-tools -i  --trusted-host=pypi.douban.com

 

Qt Designer的介紹

在PyQt中編寫UI界面可以直接通過代碼來實現,也可以通過Qt Designer來完成。Qt Designer的設計符合MVC的架構,其實現了視圖和邏輯的分離,從而實現了開發的便捷。Qt Designer中的操作方式十分靈活,其通過拖拽的方式放置控件可以隨時查看控件效果。Qt Designer生成的.ui文件(實質上是XML格式的文件)也可以通過pyuic5工具轉換成.py文件。
Qt Designer隨PyQt5-tools包一起安裝,其安裝路徑在 “Python安裝路徑\Lib\site-packages\pyqt5-tools”下。
若要啟動Qt Designer可以直接到上述目錄下,雙擊designer.exe打開Qt Designer;或將上述路徑加入環境變量,在命令行輸入designer打開;或在PyCharm中將其配置為外部工具打開。
下面以PyCharm為例,講述PyCharm中Qt Designer的配置方法。

PyCharm中PyQt5工具配置

打開PyCharm,選擇Settings -> Tools -> External Tools,點擊左上角的綠色加號。


 
Create Tool

Name填入QtDesigner(方便后續使用,名稱無所謂)。Program選擇我們安裝的PyQt5-tools下面的designer.exe。Working directory則選擇我們的工作目錄。然后點擊OK,則添加了QtDesigner作為PyCharm的外置工具。
然后添加PyUIC(UI轉換工具),PyUIC的Program為Python.exe,在Python的安裝目錄下面的Scripts目錄下,Working directory同理設為我們的工作目錄,Arguments則填入如下代碼:

-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py 

最后添加pyrcc用於PyQt5的資源文件轉碼。具體配置與上述內容相同,Arguments填入:

$FileName$ -o $FileNameWithoutExtension$_rc.py 

退出之前,點擊Apply保存配置。配置完成之后,PyCharm中會加入3個工具。


 
配置好的工具

點擊QtDesigner則打開QtDesigner的界面。

Qt Designer界面簡介

剛打開Qt Designer,則彈出如下圖所示的窗口。


 
模板窗口

創建新的Form給出了5個模板,其中Widget與Main Window最為常用。這里我們選擇創建一個Main Window。


 
QtDesigner界面

上面界面的最左側菜單為Widget Box,Widget Box中包含PyQt5中的所有Widget組件,我們可以從左側的Widget Box中拖拽出諸如Button、View和Input等組件到中間的窗口中。
點擊Form -> Preview(快捷鍵為Ctrl+R)則可以預覽我們設計好的界面,也可以用Preview In來選擇在相應的主題風格下預覽。

我們拖拽一個Label與Button進入主窗口(Main Window)。


 
主窗口

此時在右上角的Object Inspector(對象查看器)中可以看到主窗口中的已放置的對象(label與pushButton)以及其相應地Qt類。
 
對象查看器

以Label為例,此時我們點擊Main Window中的label或是在Object Inspector中選取label后,查看右側的一塊區域——Property Editor(屬性編輯器)。
 
屬性編輯器

其主要包含屬性有如下:
名稱 含義
objectName 控件對象名稱
geometry 相應寬和高與坐標
sizePolicy 控件大小的策略
minimumSize 最小的寬和高
maximumSize 最大的寬和高
font 字體
cursor 光標
... ...

PS:將minimumSize和maximumSize設為一樣的數值之后,則窗口的大小固定。

最右下角的部分則為Resource Browser(資源瀏覽器),資源瀏覽器中可以添加相應地如圖片素材,作為Label或Button等控件的背景圖片等。


 
資源瀏覽器

Qt Designer的UI文件

使用Qt Designer設計保存的文件為.ui格式的文件。
通過保存並使用記事本等軟件打開,我們可以看到.ui文件的內容如下:

<?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>800</width> <height>600</height> </rect> </property> <property name="windowTitle"> <string>MainWindow</string> </property> <widget class="QWidget" name="centralwidget"> <widget class="QLabel" name="label"> <property name="geometry"> <rect> <x>240</x> <y>80</y> <width>72</width> <height>15</height> </rect> </property> <property name="text"> <string>TextLabel</string> </property> </widget> <widget class="QPushButton" name="pushButton"> <property name="geometry"> <rect> <x>240</x> <y>120</y> <width>93</width> <height>28</height> </rect> </property> <property name="text"> <string>PushButton</string> </property> </widget> </widget> <widget class="QMenuBar" name="menubar"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>800</width> <height>26</height> </rect> </property> </widget> <widget class="QStatusBar" name="statusbar"/> </widget> <resources/> <connections/> </ui> 

從.ui文件的第一行我們便能看出,其實質是一個XML文件。ui文件中存放了在主窗口中的一切控件的相關屬性。使用XML文件來存儲UI文件,具有高可讀性和移植性,因此我們可以方便地將.ui文件轉換到.py文件,從而使得我們可以使用Python語言在設計的GUI上面編程。

將.ui文件轉換為.py文件

將.ui文件轉換到.py文件很簡單,在前面我們曾設置了pyuic5這個工具。如果你沒有在PyCharm中設置這個工具,或者根本沒有使用PyCharm,則可以到命令行中使用如下命令實現.ui到.py的轉換。

pyuic5 - o 目標文件名.py 源文件名.ui

或者直接在PyCharm中,找到.ui文件,右鍵 打開菜單找到External Tools->PyUIC。點擊之后,我們在相應工程目錄下會產生一個.py文件。(注意,.ui文件必須存放在我們的External Tools中設置的相應項目目錄下)


 
PyUIC

轉換完成之后,打開.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 Designer來制作界面的話,我們將會一次次地調試程序,來講按鈕和Label等放在合適的位置,這將是極其痛苦的過程。而通過Qt Designer,我們可以快速地制作UI,並生成Python的代碼,從而實現快速地UI的開發。

使用轉換的.py文件

然而,此時之間運行這個轉換好的Python文件是無法顯示任何窗口的。因為這個Python文件只有定義主窗口以及其控件的代碼,並沒有程序入口的代碼。為了秉持視圖與邏輯分離的原則,我們再編寫一個新的腳本來調用這個文件,並且創建一個窗口。

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_()) 

通過上述代碼,我們繼承了Ui_MainWindow類,使用其構造方法構造主窗口,並定義了程序的入口,通過創建QApplication對象來創建Qt窗口。其運行結果如下:


 
Qt窗口

通過上述操作,我們熟悉了Qt Designer設計界面,到實現業務邏輯的大致工作流程。通過這個工作流程可以簡化工作,實現速度的提升。
通過對視圖與業務邏輯的分離,在每次更改Qt Designer的UI設計的時候,也不用重新編寫代碼,而只需對更改的部分做稍微的修改即可。



作者:養薛定諤的貓
鏈接:https://www.jianshu.com/p/5b063c5745d0
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM