0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何快速開發(fā)出功能強(qiáng)大、界面美觀的GUI 應(yīng)用程序

科技綠洲 ? 來源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-11-02 14:45 ? 次閱讀

1. 介紹

Python GUI 常用的 3 種框架是:Tkinter、wxpython、PyQt5

PyQt5 基于 Qt,是 Python 和 Qt 的結(jié)合體,可以用 Python 語言編寫跨平臺的 GUI 應(yīng)用程序

相比 Tkiner和 wxpython,PyQt5 利用自帶的 Qt Designer 可視化工具進(jìn)行界面設(shè)計(jì),可以非??焖俚亻_發(fā)出一款功能強(qiáng)大、界面美觀的 GUI 應(yīng)用程序

2. 安裝

以 Mac OSX 為例,PC 下的操作類似。

首先,在系統(tǒng)內(nèi)部安裝 qt 應(yīng)用

# 安裝qt
brew install qt

然后,在 Python 虛擬環(huán)境下安裝 sip 和 pyqt5 兩個(gè)依賴庫

# 安裝依賴sip
pip3 install sip

# 安裝依賴pyqt5
pip3 install pyqt5

接著,在 Pycharm 中配置 External Tools,新建 Qt Designer 和 PyUIC 兩個(gè)命令

# Qt Designer 配置
Program/usr/local/Cellar/qt/5.14.1/libexec/Designer.app
Working directory:/usr/local/Cellar/qt/5.14.1/libexec

# PyUIC
# Python環(huán)境路徑
Program:/usr/local/bin/python3.7
# 參數(shù)
Arguments:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py 
# 路徑【固定】
Working directory:$ProjectFileDir$

其中,在第一步安裝 Qt 應(yīng)用文件夾下,找到 Designer.app 和 libexec 兩個(gè)文件,配置進(jìn)去

圖片

由于 QtDesigner 生成的文件是 *.ui 文件,需要借助 pyqt5 中的 pyuic,將 ui 文件轉(zhuǎn)換為 Python 文件

圖片

最后,可以直接在 Pycharm 中快速打開 Designer 界面、ui 轉(zhuǎn) py 文件這兩個(gè)操作。

圖片

3. 常用功能介紹

QtDesigner 是一個(gè)非常強(qiáng)大的 GUI 設(shè)計(jì)工具,生成的文件格式為:*.ui

圖片

QtDesigner 主要包含下面 6 部分:

  • 主設(shè)計(jì)界面區(qū)
  • 控件區(qū)
  • 控件屬性區(qū)
  • 信號和槽函數(shù)區(qū)
  • 資源圖片區(qū)
  • 控件結(jié)構(gòu)樹區(qū)

其中,

主設(shè)計(jì)界面區(qū):用于窗口編輯,最終的 GUI 展示區(qū)域

控件區(qū):包含文本、輸入框、選擇器、容器等控件,可以直接拖拉到窗口進(jìn)行布局

屬性區(qū):用于定義控件的屬性,包含:內(nèi)容、字體大小、寬和高等

信號和槽函數(shù)區(qū):可以很方便地為一個(gè)控件指定一個(gè)事件監(jiān)聽,比如:單擊、選中事件等

資源圖片區(qū)域:用于導(dǎo)入本地的資源文件,在控件中使用,比如:圖片

控件結(jié)構(gòu)樹區(qū):可以很直觀地顯示控件間的結(jié)構(gòu)關(guān)系

4.來個(gè)例子

第 1 步,我們從控件區(qū)拖 3 個(gè)按鈕和 2 個(gè)輸入框到界面設(shè)計(jì)區(qū)域

圖片

第 2 步,選中控件,鼠標(biāo)右鍵為控件新增屬性,比如:控件內(nèi)容、控件名稱(相當(dāng)于id),對于一些復(fù)雜的屬性設(shè)置,需要在屬性區(qū)域單獨(dú)進(jìn)行設(shè)置

編輯完 UI 界面之后,會在本地生成一個(gè) *.ui 的文件

圖片

第 3 步,選擇 *.ui 文件,在 Pycharm 中使用 PyUIC 命令,將 ui 文件轉(zhuǎn)換為 py 文件

# ui文件轉(zhuǎn)為py文件
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 790)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(130, 80, 111, 41))
        self.pushButton.setObjectName("pushButton")
        self.username = QtWidgets.QLineEdit(self.centralwidget)
        self.username.setGeometry(QtCore.QRect(260, 80, 271, 41))
        self.username.setObjectName("username")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(130, 150, 111, 41))
        self.pushButton_2.setObjectName("pushButton_2")
        self.password = QtWidgets.QLineEdit(self.centralwidget)
        self.password.setGeometry(QtCore.QRect(260, 150, 271, 41))
        self.password.setObjectName("password")
        self.login = QtWidgets.QPushButton(self.centralwidget)
        self.login.setGeometry(QtCore.QRect(260, 230, 141, 61))
        self.login.setObjectName("login")
        MainWindow.setCentralWidget(self.centralwidget)
        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.pushButton.setText(_translate("MainWindow", "用戶名:"))
        self.pushButton_2.setText(_translate("MainWindow", "密碼:"))
        self.login.setText(_translate("MainWindow", "登錄"))

第 4 步,為按鈕添加點(diǎn)擊事件

使用 控件名.信號.connect(槽函數(shù)) 的形式,為控件添加一個(gè)點(diǎn)擊事件的監(jiān)聽

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        # 為登錄按鈕指定事件
        # clicked:信號,login_met:槽函數(shù)
        self.login.clicked.connect(self.login_met)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def login_met(self):
        """
        登錄事件(槽函數(shù))
        :return:
        """
        # 用戶名輸入框的內(nèi)容
        username = self.login.text()
        # 密碼輸入框的內(nèi)容
        password = self.password.text()

        print("輸入的用戶名是:", username, "密碼是:", password)

第 5 步,展示界面

最后,新建一個(gè) py 文件,實(shí)例化一個(gè) QApplication 對象,將上面創(chuàng)建的 MainWindow 展示出來即可。

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow

# 界面文件
from temp import *


class CustomUI(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(CustomUI, self).__init__(parent)
        self.setupUi(self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    cutomUI = CustomUI()
    cutomUI.show()
    sys.exit(app.exec_())

需要注意的是,這部分內(nèi)容僅僅是調(diào)用顯示 GUI 界面的邏輯,實(shí)際項(xiàng)目開發(fā)過程中很少變動。

圖片

5.總結(jié)

通過上面的例子發(fā)現(xiàn),使用 PyQt5 構(gòu)建 GUI 真的很方便,大部分的工作都可以在 QtDesigner 設(shè)計(jì)完成,然后回歸到 Pycharm中,轉(zhuǎn)為 py 文件、編寫信號和槽函數(shù),就能快速開發(fā) GUI 圖形用戶界面。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3277

    瀏覽量

    57737
  • 可視化
    +關(guān)注

    關(guān)注

    1

    文章

    1195

    瀏覽量

    20959
  • GUI
    GUI
    +關(guān)注

    關(guān)注

    3

    文章

    661

    瀏覽量

    39719
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84755
收藏 人收藏

    評論

    相關(guān)推薦

    圖形界面開發(fā)工具GUI Guider的使用教程

    GUI Guider是NXP推出的一款功能強(qiáng)大且對用戶非常友好的圖形界面開發(fā)工具。目前最新版本是1.6.1。
    的頭像 發(fā)表于 12-20 09:49 ?1.9w次閱讀
    圖形<b class='flag-5'>界面</b><b class='flag-5'>開發(fā)</b>工具<b class='flag-5'>GUI</b> Guider的使用教程

    Python是如何使用Tkinter快速創(chuàng)建GUI應(yīng)用程序

    Tkinter是什么?Python是如何使用Tkinter快速創(chuàng)建GUI應(yīng)用程序的?
    發(fā)表于 12-23 07:15

    適用于移動終端的GUI設(shè)計(jì)與實(shí)現(xiàn)

    介紹一種適用于移動終端的圖形用戶界面GUI)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),使基于該GUI系統(tǒng)開發(fā)的移動終端應(yīng)用程序具有
    發(fā)表于 09-22 09:57 ?10次下載

    基于WinCE應(yīng)用程序GUI界面開發(fā)方案

      本文旨在介紹嵌入式系統(tǒng)在Wince下進(jìn)行GUI應(yīng)用程序開發(fā)可以選擇的不同GUI開發(fā)框架。
    發(fā)表于 09-18 15:38 ?5次下載
    基于WinCE<b class='flag-5'>應(yīng)用程序</b><b class='flag-5'>GUI</b><b class='flag-5'>界面</b>的<b class='flag-5'>開發(fā)</b>方案

    Android應(yīng)用程序GUI遍歷自動化方法

    和性能。 為了提高應(yīng)用程序自動執(zhí)行技術(shù)的圖形用戶界面GUI)覆蓋率和自動化程度以滿足Android應(yīng)用
    發(fā)表于 12-09 11:06 ?0次下載
    Android<b class='flag-5'>應(yīng)用程序</b><b class='flag-5'>GUI</b>遍歷自動化方法

    【產(chǎn)品應(yīng)用】用 AWTK 和 AWPLC 快速開發(fā)嵌入式應(yīng)用程序 (2)-走馬燈

    全稱 Toolkit AnyWhere,是 ZLG 開發(fā)的開源 GUI 引擎,旨在為嵌入式系統(tǒng)、WEB、各種小程序、手機(jī)和 PC 打造的通用 GUI 引擎,為用戶提供一個(gè)
    的頭像 發(fā)表于 05-31 18:05 ?518次閱讀
    【產(chǎn)品應(yīng)用】用 AWTK 和 AWPLC <b class='flag-5'>快速</b><b class='flag-5'>開發(fā)</b>嵌入式<b class='flag-5'>應(yīng)用程序</b> (2)-走馬燈

    用AWTK和AWPLC快速開發(fā)嵌入式應(yīng)用程序 (1)-溫度控制器

    ToolkitAnyWhere,是ZLG開發(fā)的開源GUI引擎,旨在為嵌入式系統(tǒng)、WEB、各種小程序、手機(jī)和PC打造的通用GUI引擎,為用戶提供一個(gè)
    的頭像 發(fā)表于 09-28 09:57 ?720次閱讀
    用AWTK和AWPLC<b class='flag-5'>快速</b><b class='flag-5'>開發(fā)</b>嵌入式<b class='flag-5'>應(yīng)用程序</b> (1)-溫度控制器

    【Z站推薦】用 AWTK 和 AWPLC 快速開發(fā)嵌入式應(yīng)用程序 (2)-走馬燈

    ,是ZLG開發(fā)的開源GUI引擎,旨在為嵌入式系統(tǒng)、WEB、各種小程序、手機(jī)和PC打造的通用GUI引擎,為用戶提供一個(gè)功能強(qiáng)大、高效可靠、簡單
    的頭像 發(fā)表于 10-13 14:38 ?680次閱讀
    【Z站推薦】用 AWTK 和 AWPLC <b class='flag-5'>快速</b><b class='flag-5'>開發(fā)</b>嵌入式<b class='flag-5'>應(yīng)用程序</b> (2)-走馬燈

    【產(chǎn)品應(yīng)用】用 AWTK 和 AWPLC 快速開發(fā)嵌入式應(yīng)用程序 (4)- 自定義功能塊(上)

    為嵌入式系統(tǒng)、WEB、各種小程序、手機(jī)和PC打造的通用GUI引擎,為用戶提供一個(gè)功能強(qiáng)大、高效可靠、簡單易用、可輕松做出炫酷效果的GUI引擎。AWPLC是ZLG自主
    的頭像 發(fā)表于 11-02 09:56 ?755次閱讀
    【產(chǎn)品應(yīng)用】用 AWTK 和 AWPLC <b class='flag-5'>快速</b><b class='flag-5'>開發(fā)</b>嵌入式<b class='flag-5'>應(yīng)用程序</b> (4)- 自定義<b class='flag-5'>功能</b>塊(上)

    【產(chǎn)品應(yīng)用】用 AWTK 和 AWPLC 快速開發(fā)嵌入式應(yīng)用程序 (3)- 定時(shí)器

    ToolkitAnyWhere,是ZLG開發(fā)的開源GUI引擎,旨在為嵌入式系統(tǒng)、WEB、各種小程序、手機(jī)和PC打造的通用GUI引擎,為用戶提供一個(gè)
    的頭像 發(fā)表于 11-02 10:02 ?758次閱讀
    【產(chǎn)品應(yīng)用】用 AWTK 和 AWPLC <b class='flag-5'>快速</b><b class='flag-5'>開發(fā)</b>嵌入式<b class='flag-5'>應(yīng)用程序</b> (3)- 定時(shí)器

    【產(chǎn)品應(yīng)用】用 AWTK 和 AWPLC 快速開發(fā)嵌入式應(yīng)用程序 (5)- 自定義功能塊(下)

    的開源GUI引擎,旨在為嵌入式系統(tǒng)、WEB、各種小程序、手機(jī)和PC打造的通用GUI引擎,為用戶提供一個(gè)功能強(qiáng)大、高效可靠、簡單易用、可輕松做出炫酷效果的
    的頭像 發(fā)表于 11-04 10:12 ?853次閱讀
    【產(chǎn)品應(yīng)用】用 AWTK 和 AWPLC <b class='flag-5'>快速</b><b class='flag-5'>開發(fā)</b>嵌入式<b class='flag-5'>應(yīng)用程序</b> (5)- 自定義<b class='flag-5'>功能</b>塊(下)

    【產(chǎn)品應(yīng)用】用 AWTK 和 AWPLC 快速開發(fā)嵌入式應(yīng)用程序 (2)-走馬燈

    ,是ZLG開發(fā)的開源GUI引擎,旨在為嵌入式系統(tǒng)、WEB、各種小程序、手機(jī)和PC打造的通用GUI引擎,為用戶提供一個(gè)功能強(qiáng)大、高效可靠、簡單
    的頭像 發(fā)表于 06-08 10:13 ?641次閱讀
    【產(chǎn)品應(yīng)用】用 AWTK 和 AWPLC <b class='flag-5'>快速</b><b class='flag-5'>開發(fā)</b>嵌入式<b class='flag-5'>應(yīng)用程序</b> (2)-走馬燈

    LVGL結(jié)合RT-thread快速開發(fā)出漂亮GUI的利器GUI-Guider

    GUI-Guider是一種功能強(qiáng)大的軟件,它為用戶提供了一種簡單直觀的方式來創(chuàng)建和設(shè)計(jì)圖形用戶界面GUI)。
    的頭像 發(fā)表于 11-14 12:38 ?3820次閱讀
    LVGL結(jié)合RT-thread<b class='flag-5'>快速</b><b class='flag-5'>開發(fā)出</b>漂亮<b class='flag-5'>GUI</b>的利器<b class='flag-5'>GUI</b>-Guider

    python窗口圖形界面編程

    Python是一種功能強(qiáng)大而又簡單易用的編程語言,支持多種編程范式,包括面向過程、面向?qū)ο蠛秃瘮?shù)式編程。除了用于開發(fā)各種類型的應(yīng)用程序和網(wǎng)絡(luò)服務(wù),Python還提供了豐富的圖形用戶界面
    的頭像 發(fā)表于 11-22 14:23 ?880次閱讀

    上位機(jī)可視化界面編程軟件有哪些

    上位機(jī)可視化界面編程軟件是一類用于開發(fā)圖形用戶界面(GUI)的軟件工具,它們通常提供了豐富的界面元素、易于使用的編程接口和
    的頭像 發(fā)表于 06-06 10:48 ?2550次閱讀