目錄
1、創(chuàng)建項目
2、將.ui文件生成.py文件
2.1、Eric 6編譯
?2.2、Python命令行編譯
?2.3、腳本編譯
3、界面、邏輯分離思想
在開始本文之前提醒各位朋友,Python記得安裝PyQt5庫文件,Python語言功能很強,但是Python自帶的GUI開發(fā)庫Tkinter功能很弱,難以開發(fā)出專業(yè)的GUI。好在Python語言的開放性,很容易將其他語言(特別是C/C++)的類庫封裝為Python綁定,而Qt是非常優(yōu)秀的C++ GUI 類庫,所以就有了PyQt。
安裝指令如下所示:
pip install pyqt5
這也Python基礎(chǔ)知識,不在本專欄主講范疇,簡單聊聊。
Qt Designer,即Qt設(shè)計師,是一個強大、靈活的可視化GUI設(shè)計工具,可以幫助我們加快開發(fā)PyQt程序的速度。
Qt Designer 是專門用來制作PyQt程序中UI界面的工具,它生成的UI界面是一個后綴為.ui 的文件。制作程序UI界面,一般可以通過UI制作工具和純代碼編寫兩種方式來實現(xiàn),我們主要是通過Qt Creator制作完成。
該文件使用非常簡單,可以通過命令將.ui文件轉(zhuǎn)換成.py格式的文件,并被其他Python文件引用,也可以通過Eric 6進行手工轉(zhuǎn)換。
本博文以命令的方式為主,手工的方式為輔,但是原理和結(jié)果是一樣的,各位可以根據(jù)自己的偏好進行選擇。
Qt Designer 符合MVC(模型―視圖—控制器)設(shè)計模式,做到了顯示和業(yè)務(wù)邏輯的分離,具有以下優(yōu)點:
-
使用簡單,通過拖曳和點擊就可以完成復(fù)雜的界面設(shè)計,而且還可以隨時預(yù)覽查看效果圖。
-
轉(zhuǎn)換Python文件方便。Qt Designer 可以將設(shè)計好的用戶界面保存為.ui文件,其實是XML 格式的文本文件。為了在PyQt中使用.ui文件,可以通過pyuic5命令將.ui文件轉(zhuǎn)換為.py文件件,然后將.py文件引入到自定義的Python代碼中。
Qt Creator 的界面很簡潔,上方是主菜單欄,左側(cè)是主工具欄,窗口的中間部分是工作區(qū)。根據(jù)設(shè)計內(nèi)容不同,工作區(qū)會顯示不同的內(nèi)容。
??主窗口左側(cè)是主工具欄,主工具欄提供了項目文件編輯、窗體設(shè)計、程序調(diào)試、項目設(shè)置等各種功能按鈕。
在左側(cè)主工具欄單擊“Welcome(歡迎)”按鈕后顯示實例的界面。這時工作區(qū)的左側(cè)有 “Projects”、“Examples(示例)”、“Tutorials(教程)”、“Get Started Now”幾個按鈕,單擊后會在主工作區(qū)顯示相應(yīng)的內(nèi)容:
-
單擊“Projects”按鈕后,工作區(qū)顯示新建項目按鈕和最近打開項目的列表。
-
單擊“Examples(示例)”按鈕后,工作區(qū)顯示 Qt 自帶的大量實例,選擇某個實例就可以在 Qt Creator 中打開該項目源程序。
-
單擊“Tutorials(教程)”按鈕后,工作區(qū)顯示各種視頻教程,查看視頻教程需要聯(lián)網(wǎng)并使用瀏覽器打開。
-
單擊“Get Started Now”按鈕,工作區(qū)顯示“Qt Creator Manual”幫助主題內(nèi)容。
學(xué)習(xí)一種編程語言或編程環(huán)境,通常會先編寫一個“Hello World”程序。我們也用 Qt Creator 編寫一個“Hello World”程序,以初步了解 Qt Creator 設(shè)計應(yīng)用程序的基本過程,對使用 Qt Creator 編寫 Qt Python 應(yīng)用程序建立初步的了解。
1、創(chuàng)建項目
第1步:單擊 Qt Creator 的菜單項文件->新建文件或項目,出現(xiàn)如下圖所示的對話框。在這個對話框里選擇需要創(chuàng)建的項目或文件的模板。
??Qt Creator 可以創(chuàng)建多種項目,在最左側(cè)的列表框中單擊“Application”,中間的列表框中列出了可以創(chuàng)建的應(yīng)用程序的模板,各類應(yīng)用程序如下:
-
Qt Widgets Application,支持桌面平臺的有圖形用戶界面(Graphic User Interface,GUI) 界面的應(yīng)用程序。GUI 的設(shè)計完全基于 C++ 語言,采用 Qt 提供的一套 C++ 類庫。
-
Qt Console Application,控制臺應(yīng)用程序,無 GUI 界面,一般用于學(xué)習(xí) C/C++ 語言,只需要簡單的輸入輸出操作時可創(chuàng)建此類項目。
-
Qt for Python - Empty,創(chuàng)建一個只包含QApplication主代碼的Python應(yīng)用程序的Qt。
-
Qt for Python - Window,創(chuàng)建一個包含空窗口的Qt用于Python應(yīng)用程序。
-
Qt Quick Application - Empty,創(chuàng)建一個Qt Quick 2應(yīng)用程序項目,它可以包含QML和C++代碼。你可以構(gòu)建應(yīng)用程序并將其部署到桌面、嵌入式和移動目標(biāo)平臺。
-
Qt Quick Application - Scroll,使用ScrollView組件實現(xiàn)可滾動列表視圖(需要 Qt 5.9或更高版本)。
-
Qt Quick Application - Stack,使用StackView組件實現(xiàn)一組基于堆棧的導(dǎo)航模型的頁面(需要 Qt 5.7或更高版本)。
-
Qt Quick Application - Swipe,使用SwipeView組件實現(xiàn)一組基于滑動的導(dǎo)航模型的頁面(需要Qt 5.7或更高版本)。
第2步:這里創(chuàng)建一個Qt for Python - Empty應(yīng)用程序模板就可以,如下圖所示:
第3步:鼠標(biāo)右擊main工程,在工程下新建一個主窗口的界面ui文件,如下圖所示:
?
?
?此時工程文件如下所示:
?第4步:雙擊進入mainwindow.ui文件,設(shè)計Hello,world!顯示效果,如下所示:
?使用代碼編輯軟件打開UI文件,可見相關(guān)的數(shù)據(jù)參數(shù),如下所示:
2、將.ui文件生成.py文件
使用Qt Designer 設(shè)計的用戶界面默認保存為.ui文件,其內(nèi)容結(jié)構(gòu)類似于XML,但這種文件并不是我們想要的,我們想要的是.py 文件,所以還需要使用其他方法將.ui文件轉(zhuǎn)換為.py文件。本博文聊聊3種方法。
2.1、Eric 6編譯
最簡單的方法是通過Eric 6手工編譯.ui文件,只需要單擊鼠標(biāo)就能完成。
第1步,下載Eric 6軟件,下載地址:The Eric Python IDE - Download
下載Eric 6后,點擊install.py文件進行安裝,如下所示:
?安裝中~
?安裝完成后,可在Python安裝包路徑:找到eric6文件夾,例如我的Python安裝的D盤,路徑為:D:\Python_3.8.3\Lib\site-packages\eric6,并找到eric6.pyw文件,點擊運行,效果如下所示:
?第2步:配置Eric6,進入菜單欄 設(shè)置->首選項,如下所示:
在左側(cè)列表中選擇項目->多重項目,點擊右側(cè)圖標(biāo)后選定工程文件位置,我這里是桌面文件夾,如下所示:
?第3步:建立項目,菜單欄中選擇項目->新建,創(chuàng)建項目,效果如下所示:
?點擊OK后,注意,Eric 6存在許多奇奇怪怪不知名的問題,點擊是否將已有文件添加到工程YES,可能會卡死,這里點擊NO,僅僅創(chuàng)建項目即可,如下所示:
?第4步:導(dǎo)入UI文件并編譯,此時可見左側(cè)項目瀏覽器點亮可編輯,如下所示:
?點擊窗體,添加窗體(也就是咱設(shè)計好的UI文件),如下所示:
?
?
此時可見源代碼下有編譯好的Python文件:Ui_mainwindow.py,如下所示:
可在桌面Demo文件夾中點擊查看,如下所示:
?UI文件轉(zhuǎn)換的Python代碼內(nèi)容如下所示:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'C:\Users\Administrator\Desktop\Demo\mainwindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(320, 240)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(80, 50, 151, 141))
font = QtGui.QFont()
font.setPointSize(15)
self.label.setFont(font)
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actioncheng = QtWidgets.QAction(MainWindow)
self.actioncheng.setObjectName("actioncheng")
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", "Hello,World!"))
self.actioncheng.setText(_translate("MainWindow", "cheng"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
運行Python文件,即可查看GUI效果,如下所示:
?2.2、Python命令行編譯
Python命令行將UI文件編譯成Python文件依托于pyuic5命令。
PyQt 5安裝成功后,pyuic5命令默認安裝在Python安裝包目錄Scripts文件下,例如我的安裝在:D:\Python_3.8.3\Scripts,效果如下所示:
?第1步:執(zhí)行指令,將UI文件生成Python代碼,指令如下所示:
pyuic5 -o mainwindow.py mainwindow.ui
此時將mainwindow.ui生成mainwindow.py文件,效果如下所示:
第2步:將mainwindow.py添加入Qt Creator當(dāng)時創(chuàng)建的工程,如下所示:
最后在main函數(shù)中編寫調(diào)用GUI的程序(可參見 2.1、Eric 6編譯 調(diào)用的例程代碼),6行代碼如下所示:
# This Python file uses the following encoding: utf-8
import sys
from PySide2.QtWidgets import QApplication
#添加的所需庫文件
from PyQt5 import QtCore, QtGui, QtWidgets
#mainwindow.ui Python文件
import mainwindow
if __name__ == "__main__":
app = QApplication([])
#此處調(diào)用GUI的程序
widgets = QtWidgets.QMainWindow()
ui = mainwindow.Ui_MainWindow()
ui.setupUi(widgets)
widgets.show()
#結(jié)束
sys.exit(app.exec_())
點擊運行,GUI效果如下所示:
最后補充一點, Qt Creator運行Python文件需要提前安裝配置好Python環(huán)境,否則無法正常編譯運行,這里就不再贅述安裝過程了。
?2.3、腳本編譯
有些朋友可能對2.2、Python命令行編譯的方式不熟悉或者不太喜歡,這里再拓展講講Python腳本編譯的方法,腳本本質(zhì)上是用Python代碼把上述操作封裝起來,腳本代碼如下所示:
import os
import os.path
dir ='./' #文件所在的路徑
#找出路徑下所有的.ui文件
def listUiFile():
list = []
files = os.listdir(dir)
for filename in files:
#print(filename)
if os.path.splitext(filename)[1] == '.ui':
list.append(filename)
return list
#把擴展名未.ui的轉(zhuǎn)換成.py的文件
def transPyFile(filename):
return os.path.splitext(filename)[0] + '.py'
#通過命令把.ui文件轉(zhuǎn)換成.py文件
def runMain():
list = listUiFile()
for uifile in list:
pyfile = transPyFile(uifile)
cmd = 'pyuic5 -o {pyfile} {uifile}'.format(pyfile=pyfile, uifile=uifile)
os.system(cmd)
if __name__ =="__main__":
runMain()
只要把腳本代碼Python文件放在需要轉(zhuǎn)換UI界面文件的目錄下,直接運行,就可以將UI文件編譯為Python文件。
3、界面、邏輯分離思想
通過之前的內(nèi)容學(xué)會了如何制作.ui文件,以及如何把.ui文件轉(zhuǎn)換成.py文件,最后再補充講講界面、邏輯分離思想。
值得注意的是,由于這里的.py文件是由.ui文件編譯而來的,因此當(dāng).py文件發(fā)生變化時,對應(yīng)的.py文件也會發(fā)生變化??梢园堰@種由.ui文件編譯而來的.py文件稱為界面文件。
由于界面文件每次編譯時都會初始化,所以需要新建一個.py文件調(diào)用界面文件,這個新建的.py文件被稱為邏輯文件,也可以稱為業(yè)務(wù)文件。
界面文件和邏輯文件是兩個相對獨立的文件,通過上述方法就實現(xiàn)了界面與邏輯的分離(也可以說是“顯示和業(yè)務(wù)邏輯的分離")。文章來源:http://www.zghlxwxcb.cn/news/detail-778648.html
實現(xiàn)界面與邏輯的分離方法很簡單,只需要新建一個邏輯處理Python文件,繼承界面文件的主窗口類即可,后續(xù)項目我們會講到實際的應(yīng)用。文章來源地址http://www.zghlxwxcb.cn/news/detail-778648.html
到了這里,關(guān)于Python Qt GUI設(shè)計:將UI文件轉(zhuǎn)換為Python文件的三種妙招(基礎(chǔ)篇—2)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!