日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)

發(fā)布時(shí)間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1、創(chuàng)建項(xiàng)目

2、將.ui文件生成.py文件

2.1、Eric 6編譯

2.2、Python命令行編譯

2.3、腳本編譯

3、界面、邏輯分離思想


在開(kāi)始本文之前提醒各位朋友,Python記得安裝PyQt5庫(kù)文件,Python語(yǔ)言功能很強(qiáng),但是Python自帶的GUI開(kāi)發(fā)庫(kù)Tkinter功能很弱,難以開(kāi)發(fā)出專(zhuān)業(yè)的GUI。好在Python語(yǔ)言的開(kāi)放性,很容易將其他語(yǔ)言(特別是C/C++)的類(lèi)庫(kù)封裝為Python綁定,而Qt是非常優(yōu)秀的C++ GUI 類(lèi)庫(kù),所以就有了PyQt。

安裝指令如下所示:

pip install pyqt5

這也Python基礎(chǔ)知識(shí),不在本專(zhuān)欄主講范疇,簡(jiǎn)單聊聊。

Qt Designer,即Qt設(shè)計(jì)師,是一個(gè)強(qiáng)大、靈活的可視化GUI設(shè)計(jì)工具,可以幫助我們加快開(kāi)發(fā)PyQt程序的速度。

Qt Designer 是專(zhuān)門(mén)用來(lái)制作PyQt程序中UI界面的工具,它生成的UI界面是一個(gè)后綴為.ui 的文件。制作程序UI界面,一般可以通過(guò)UI制作工具和純代碼編寫(xiě)兩種方式來(lái)實(shí)現(xiàn),我們主要是通過(guò)Qt Creator制作完成。

該文件使用非常簡(jiǎn)單,可以通過(guò)命令將.ui文件轉(zhuǎn)換成.py格式的文件,并被其他Python文件引用,也可以通過(guò)Eric 6進(jìn)行手工轉(zhuǎn)換。

本博文以命令的方式為主,手工的方式為輔,但是原理和結(jié)果是一樣的,各位可以根據(jù)自己的偏好進(jìn)行選擇。

Qt Designer 符合MVC(模型―視圖—控制器)設(shè)計(jì)模式,做到了顯示和業(yè)務(wù)邏輯的分離,具有以下優(yōu)點(diǎn):

  • 使用簡(jiǎn)單,通過(guò)拖曳和點(diǎn)擊就可以完成復(fù)雜的界面設(shè)計(jì),而且還可以隨時(shí)預(yù)覽查看效果圖。
  • 轉(zhuǎn)換Python文件方便。Qt Designer 可以將設(shè)計(jì)好的用戶(hù)界面保存為.ui文件,其實(shí)是XML 格式的文本文件。為了在PyQt中使用.ui文件,可以通過(guò)pyuic5命令將.ui文件轉(zhuǎn)換為.py文件件,然后將.py文件引入到自定義的Python代碼中。

Qt Creator 的界面很簡(jiǎn)潔,上方是主菜單欄,左側(cè)是主工具欄,窗口的中間部分是工作區(qū)。根據(jù)設(shè)計(jì)內(nèi)容不同,工作區(qū)會(huì)顯示不同的內(nèi)容。

主窗口左側(cè)是主工具欄,主工具欄提供了項(xiàng)目文件編輯、窗體設(shè)計(jì)、程序調(diào)試、項(xiàng)目設(shè)置等各種功能按鈕。

在左側(cè)主工具欄單擊“Welcome(歡迎)”按鈕后顯示實(shí)例的界面。這時(shí)工作區(qū)的左側(cè)有 “Projects”、“Examples(示例)”、“Tutorials(教程)”、“Get Started Now”幾個(gè)按鈕,單擊后會(huì)在主工作區(qū)顯示相應(yīng)的內(nèi)容:

  • 單擊“Projects”按鈕后,工作區(qū)顯示新建項(xiàng)目按鈕和最近打開(kāi)項(xiàng)目的列表。
  • 單擊“Examples(示例)”按鈕后,工作區(qū)顯示 Qt 自帶的大量實(shí)例,選擇某個(gè)實(shí)例就可以在 Qt Creator 中打開(kāi)該項(xiàng)目源程序。
  • 單擊“Tutorials(教程)”按鈕后,工作區(qū)顯示各種視頻教程,查看視頻教程需要聯(lián)網(wǎng)并使用瀏覽器打開(kāi)。
  • 單擊“Get Started Now”按鈕,工作區(qū)顯示“Qt Creator Manual”幫助主題內(nèi)容。

學(xué)習(xí)一種編程語(yǔ)言或編程環(huán)境,通常會(huì)先編寫(xiě)一個(gè)“Hello World”程序。我們也用 Qt Creator 編寫(xiě)一個(gè)“Hello World”程序,以初步了解 Qt Creator 設(shè)計(jì)應(yīng)用程序的基本過(guò)程,對(duì)使用 Qt Creator 編寫(xiě) Qt Python 應(yīng)用程序建立初步的了解。

1、創(chuàng)建項(xiàng)目

第1步:單擊 Qt Creator 的菜單項(xiàng)文件->新建文件或項(xiàng)目,出現(xiàn)如下圖所示的對(duì)話框。在這個(gè)對(duì)話框里選擇需要?jiǎng)?chuàng)建的項(xiàng)目或文件的模板。

?Qt Creator 可以創(chuàng)建多種項(xiàng)目,在最左側(cè)的列表框中單擊“Application”,中間的列表框中列出了可以創(chuàng)建的應(yīng)用程序的模板,各類(lèi)應(yīng)用程序如下:

  • Qt Widgets Application,支持桌面平臺(tái)的有圖形用戶(hù)界面(Graphic User Interface,GUI) 界面的應(yīng)用程序。GUI 的設(shè)計(jì)完全基于 C++ 語(yǔ)言,采用 Qt 提供的一套 C++ 類(lèi)庫(kù)。
  • Qt Console Application,控制臺(tái)應(yīng)用程序,無(wú) GUI 界面,一般用于學(xué)習(xí) C/C++ 語(yǔ)言,只需要簡(jiǎn)單的輸入輸出操作時(shí)可創(chuàng)建此類(lèi)項(xiàng)目。
  • Qt for Python - Empty,創(chuàng)建一個(gè)只包含QApplication主代碼的Python應(yīng)用程序的Qt。
  • Qt for Python - Window,創(chuàng)建一個(gè)包含空窗口的Qt用于Python應(yīng)用程序。
  • Qt Quick Application - Empty,創(chuàng)建一個(gè)Qt Quick 2應(yīng)用程序項(xiàng)目,它可以包含QML和C++代碼。你可以構(gòu)建應(yīng)用程序并將其部署到桌面、嵌入式和移動(dòng)目標(biāo)平臺(tái)。
  • Qt Quick Application - Scroll,使用ScrollView組件實(shí)現(xiàn)可滾動(dòng)列表視圖(需要 Qt 5.9或更高版本)。
  • Qt Quick Application - Stack,使用StackView組件實(shí)現(xiàn)一組基于堆棧的導(dǎo)航模型的頁(yè)面(需要 Qt 5.7或更高版本)。
  • Qt Quick Application - Swipe,使用SwipeView組件實(shí)現(xiàn)一組基于滑動(dòng)的導(dǎo)航模型的頁(yè)面(需要Qt 5.7或更高版本)。

第2步:這里創(chuàng)建一個(gè)Qt for Python - Empty應(yīng)用程序模板就可以,如下圖所示:

第3步:鼠標(biāo)右擊main工程,在工程下新建一個(gè)主窗口的界面ui文件,如下圖所示:

  • Dialog模板,基于QDialog類(lèi)的窗體,具有一般對(duì)話框的特性,如可以模態(tài)顯示、具有返回值等。
  • Main Window模板,基于QMainWindow類(lèi)的窗體,具有主窗口的特性,窗口上有主菜單欄、工具欄、狀態(tài)欄等。
  • Widget模板,基于QWidget類(lèi)的窗體。QWidget類(lèi)是所有界面組件的基類(lèi),如 QLabel、QPushButton等界面組件都是從 QWidget類(lèi)繼承而來(lái)的。QWidget類(lèi)也是 QDialog 和QMainWindow的父類(lèi),基于QWidget類(lèi)創(chuàng)建的窗體可以作為獨(dú)立的窗口運(yùn)行,也可以嵌入到其他界面組件內(nèi)顯示。

?此時(shí)工程文件如下所示:

第4步:雙擊進(jìn)入mainwindow.ui文件,設(shè)計(jì)Hello,world!顯示效果,如下所示:

使用代碼編輯軟件打開(kāi)UI文件,可見(jiàn)相關(guān)的數(shù)據(jù)參數(shù),如下所示:

2、將.ui文件生成.py文件

使用Qt Designer 設(shè)計(jì)的用戶(hù)界面默認(rèn)保存為.ui文件,其內(nèi)容結(jié)構(gòu)類(lèi)似于XML,但這種文件并不是我們想要的,我們想要的是.py 文件,所以還需要使用其他方法將.ui文件轉(zhuǎn)換為.py文件。本博文聊聊3種方法。

2.1、Eric 6編譯

最簡(jiǎn)單的方法是通過(guò)Eric 6手工編譯.ui文件,只需要單擊鼠標(biāo)就能完成。

第1步,下載Eric 6軟件,下載地址:The Eric Python IDE - Download

下載Eric 6后,點(diǎn)擊install.py文件進(jìn)行安裝,如下所示:

安裝中~?

安裝完成后,可在Python安裝包路徑:找到eric6文件夾,例如我的Python安裝的D盤(pán),路徑為:D:\Python_3.8.3\Lib\site-packages\eric6,并找到eric6.pyw文件,點(diǎn)擊運(yùn)行,效果如下所示:

第2步:配置Eric6,進(jìn)入菜單欄?設(shè)置->首選項(xiàng),如下所示:

在左側(cè)列表中選擇項(xiàng)目->多重項(xiàng)目,點(diǎn)擊右側(cè)圖標(biāo)后選定工程文件位置,我這里是桌面文件夾,如下所示:

第3步:建立項(xiàng)目,菜單欄中選擇項(xiàng)目->新建,創(chuàng)建項(xiàng)目,效果如下所示:

點(diǎn)擊OK后,注意,Eric 6存在許多奇奇怪怪不知名的問(wèn)題,點(diǎn)擊是否將已有文件添加到工程YES,可能會(huì)卡死,這里點(diǎn)擊NO,僅僅創(chuàng)建項(xiàng)目即可,如下所示:

第4步:導(dǎo)入U(xiǎn)I文件并編譯,此時(shí)可見(jiàn)左側(cè)項(xiàng)目瀏覽器點(diǎn)亮可編輯,如下所示:

點(diǎn)擊窗體,添加窗體(也就是咱設(shè)計(jì)好的UI文件),如下所示:

此時(shí)可見(jiàn)源代碼下有編譯好的Python文件:Ui_mainwindow.py,如下所示:

可在桌面Demo文件夾中點(diǎn)擊查看,如下所示:

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, QtWidgetsclass 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.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.label.setText(_translate("MainWindow", "Hello,World!"))self.actioncheng.setText(_translate("MainWindow", "cheng"))if __name__ == "__main__":import sysapp = QtWidgets.QApplication(sys.argv)MainWindow = QtWidgets.QMainWindow()ui = Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())

運(yùn)行Python文件,即可查看GUI效果,如下所示:

2.2、Python命令行編譯

Python命令行將UI文件編譯成Python文件依托于pyuic5命令

PyQt 5安裝成功后,pyuic5命令默認(rèn)安裝在Python安裝包目錄Scripts文件下,例如我的安裝在:D:\Python_3.8.3\Scripts,效果如下所示:

第1步:執(zhí)行指令,將UI文件生成Python代碼,指令如下所示:

pyuic5 -o mainwindow.py mainwindow.ui

此時(shí)將mainwindow.ui生成mainwindow.py文件,效果如下所示:

第2步:將mainwindow.py添加入Qt Creator當(dāng)時(shí)創(chuàng)建的工程,如下所示:

最后在main函數(shù)中編寫(xiě)調(diào)用GUI的程序(可參見(jiàn) 2.1、Eric 6編譯 調(diào)用的例程代碼),6行代碼如下所示:

# This Python file uses the following encoding: utf-8
import sys
from PySide2.QtWidgets import QApplication#添加的所需庫(kù)文件
from PyQt5 import QtCore, QtGui, QtWidgets
#mainwindow.ui Python文件
import mainwindowif __name__ == "__main__":app = QApplication([])#此處調(diào)用GUI的程序widgets = QtWidgets.QMainWindow()ui = mainwindow.Ui_MainWindow()ui.setupUi(widgets)widgets.show()#結(jié)束sys.exit(app.exec_())

點(diǎn)擊運(yùn)行,GUI效果如下所示:

最后補(bǔ)充一點(diǎn),?Qt Creator運(yùn)行Python文件需要提前安裝配置好Python環(huán)境,否則無(wú)法正常編譯運(yùn)行,這里就不再贅述安裝過(guò)程了。

2.3、腳本編譯

有些朋友可能對(duì)2.2、Python命令行編譯的方式不熟悉或者不太喜歡,這里再拓展講講Python腳本編譯的方法,腳本本質(zhì)上是用Python代碼把上述操作封裝起來(lái),腳本代碼如下所示:

import os
import os.pathdir ='./' #文件所在的路徑#找出路徑下所有的.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#把擴(kuò)展名未.ui的轉(zhuǎn)換成.py的文件
def transPyFile(filename):return os.path.splitext(filename)[0] + '.py'#通過(guò)命令把.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界面文件的目錄下,直接運(yùn)行,就可以將UI文件編譯為Python文件。

3、界面、邏輯分離思想

通過(guò)之前的內(nèi)容學(xué)會(huì)了如何制作.ui文件,以及如何把.ui文件轉(zhuǎn)換成.py文件,最后再補(bǔ)充講講界面、邏輯分離思想。

值得注意的是,由于這里的.py文件是由.ui文件編譯而來(lái)的,因此當(dāng).py文件發(fā)生變化時(shí),對(duì)應(yīng)的.py文件也會(huì)發(fā)生變化。可以把這種由.ui文件編譯而來(lái)的.py文件稱(chēng)為界面文件。

由于界面文件每次編譯時(shí)都會(huì)初始化,所以需要新建一個(gè).py文件調(diào)用界面文件,這個(gè)新建的.py文件被稱(chēng)為邏輯文件,也可以稱(chēng)為業(yè)務(wù)文件。

界面文件和邏輯文件是兩個(gè)相對(duì)獨(dú)立的文件,通過(guò)上述方法就實(shí)現(xiàn)了界面與邏輯的分離(也可以說(shuō)是“顯示和業(yè)務(wù)邏輯的分離")。

實(shí)現(xiàn)界面與邏輯的分離方法很簡(jiǎn)單,只需要新建一個(gè)邏輯處理Python文件,繼承界面文件的主窗口類(lèi)即可,后續(xù)項(xiàng)目我們會(huì)講到實(shí)際的應(yīng)用。

如果以后想要更新界面,只需要對(duì).ui文件進(jìn)行更新,然后再編譯成對(duì)應(yīng)的.py 文件即可。而邏輯文件則視情況做一些調(diào)整,一般情況下不需要調(diào)整太多。


參考資料:

1、快速熟悉 PyQt5 與 Eric6 的極速 GUI 開(kāi)發(fā)?

2、完美安裝 Anaconda3 + PyQt5 + Eric6

3、關(guān)于pyuic5命令詳細(xì)介紹,參考官網(wǎng):Using Qt Designer — PyQt v5.15 Reference Guide

總結(jié)

以上是生活随笔為你收集整理的Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。