0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何快速开发出功能强大、界面美观的GUI 应用程序

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-02 14:45 次阅读

1. 介绍

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

PyQt5 基于 Qt,是 Python 和 Qt 的结合体,可以用 Python 语言编写跨平台的 GUI 应用程序

相比 Tkiner和 wxpython,PyQt5 利用自带的 Qt Designer 可视化工具进行界面设计,可以非常快速地开发出一款功能强大、界面美观的 GUI 应用程序

2. 安装

以 Mac OSX 为例,PC 下的操作类似。

首先,在系统内部安装 qt 应用

# 安装qt
brew install qt

然后,在 Python 虚拟环境下安装 sip 和 pyqt5 两个依赖库

# 安装依赖sip
pip3 install sip

# 安装依赖pyqt5
pip3 install pyqt5

接着,在 Pycharm 中配置 External Tools,新建 Qt Designer 和 PyUIC 两个命令

# 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环境路径
Program:/usr/local/bin/python3.7
# 参数
Arguments:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py 
# 路径【固定】
Working directory:$ProjectFileDir$

其中,在第一步安装 Qt 应用文件夹下,找到 Designer.app 和 libexec 两个文件,配置进去

图片

由于 QtDesigner 生成的文件是 *.ui 文件,需要借助 pyqt5 中的 pyuic,将 ui 文件转换为 Python 文件

图片

最后,可以直接在 Pycharm 中快速打开 Designer 界面、ui 转 py 文件这两个操作。

图片

3. 常用功能介绍

QtDesigner 是一个非常强大的 GUI 设计工具,生成的文件格式为:*.ui

图片

QtDesigner 主要包含下面 6 部分:

  • 主设计界面区
  • 控件区
  • 控件属性区
  • 信号和槽函数区
  • 资源图片区
  • 控件结构树区

其中,

主设计界面区:用于窗口编辑,最终的 GUI 展示区域

控件区:包含文本、输入框、选择器、容器等控件,可以直接拖拉到窗口进行布局

属性区:用于定义控件的属性,包含:内容、字体大小、宽和高等

信号和槽函数区:可以很方便地为一个控件指定一个事件监听,比如:单击、选中事件等

资源图片区域:用于导入本地的资源文件,在控件中使用,比如:图片

控件结构树区:可以很直观地显示控件间的结构关系

4.来个例子

第 1 步,我们从控件区拖 3 个按钮和 2 个输入框到界面设计区域

图片

第 2 步,选中控件,鼠标右键为控件新增属性,比如:控件内容、控件名称(相当于id),对于一些复杂的属性设置,需要在属性区域单独进行设置

编辑完 UI 界面之后,会在本地生成一个 *.ui 的文件

图片

第 3 步,选择 *.ui 文件,在 Pycharm 中使用 PyUIC 命令,将 ui 文件转换为 py 文件

# ui文件转为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 步,为按钮添加点击事件

使用 控件名.信号.connect(槽函数) 的形式,为控件添加一个点击事件的监听

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        # 为登录按钮指定事件
        # clicked:信号,login_met:槽函数
        self.login.clicked.connect(self.login_met)

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

    def login_met(self):
        """
        登录事件(槽函数)
        :return:
        """
        # 用户名输入框的内容
        username = self.login.text()
        # 密码输入框的内容
        password = self.password.text()

        print("输入的用户名是:", username, "密码是:", password)

第 5 步,展示界面

最后,新建一个 py 文件,实例化一个 QApplication 对象,将上面创建的 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_())

需要注意的是,这部分内容仅仅是调用显示 GUI 界面的逻辑,实际项目开发过程中很少变动。

图片

5.总结

通过上面的例子发现,使用 PyQt5 构建 GUI 真的很方便,大部分的工作都可以在 QtDesigner 设计完成,然后回归到 Pycharm中,转为 py 文件、编写信号和槽函数,就能快速开发 GUI 图形用户界面。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 应用程序
    +关注

    关注

    37

    文章

    3136

    浏览量

    56394
  • 可视化
    +关注

    关注

    1

    文章

    1020

    浏览量

    20556
  • GUI
    GUI
    +关注

    关注

    3

    文章

    610

    浏览量

    38792
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83467
收藏 人收藏

    评论

    相关推荐

    图形界面开发工具GUI Guider的使用教程

    GUI Guider是NXP推出的一款功能强大且对用户非常友好的图形界面开发工具。目前最新版本是1.6.1。
    的头像 发表于 12-20 09:49 4939次阅读
    图形<b class='flag-5'>界面</b><b class='flag-5'>开发</b>工具<b class='flag-5'>GUI</b> Guider的使用教程

    AWTK有何功能

    简介AWTK 全称 Toolkit AnyWhere,是 ZLG 开发的开源 GUI 引擎,旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎,为用户提供一个
    发表于 08-20 07:42

    Python是如何使用Tkinter快速创建GUI应用程序

    Tkinter是什么?Python是如何使用Tkinter快速创建GUI应用程序的?
    发表于 12-23 07:15

    适用于移动终端的GUI设计与实现

    介绍一种适用于移动终端的图形用户界面GUI)系统的设计与实现,使基于该GUI系统开发的移动终端应用程序具有
    发表于 09-22 09:57 10次下载

    基于WinCE应用程序GUI界面开发方案

      本文旨在介绍嵌入式系统在Wince下进行GUI应用程序开发可以选择的不同GUI开发框架。
    发表于 09-18 15:38 5次下载
    基于WinCE<b class='flag-5'>应用程序</b><b class='flag-5'>GUI</b><b class='flag-5'>界面</b>的<b class='flag-5'>开发</b>方案

    Android应用程序GUI遍历自动化方法

    和性能。 为了提高应用程序自动执行技术的图形用户界面GUI)覆盖率和自动化程度以满足Android应用
    发表于 12-09 11:06 0次下载
    Android<b class='flag-5'>应用程序</b><b class='flag-5'>GUI</b>遍历自动化方法

    嵌入式UI界面快速开发的方法

    于自绘GUI,它具有开发简单、系统稳定、开发效率高等优点。 现在的串口屏除了显示GUI界面以外,还有许多其他
    的头像 发表于 11-08 17:03 2682次阅读

    基于功能强大的子域收集工具

    OneForAll 收集能力强大、支持子域爆破、支持子域验证、支持子域爬取、支持子域置换、支持子域接管、处理功能强大、速度极快、体验良好,是一款集百家之长,功能强大的全面快速子域收集工
    的头像 发表于 10-25 14:50 626次阅读

    一个快速应用程序开发(RAD)工具(Golang版)

    SNMPAgent Builder(Golang版)是一个快速应用程序开发(RAD)工具,用于基于Golang 的 SNMP代理开发。提供了一个直观的图形用户
    的头像 发表于 04-13 09:30 1090次阅读

    用AWTK和AWPLC快速开发嵌入式应用程序 (1)-温度控制器

    ToolkitAnyWhere,是ZLG开发的开源GUI引擎,旨在为嵌入式系统、WEB、各种小程序、手机和PC打造的通用GUI引擎,为用户提供一个
    的头像 发表于 09-28 09:57 437次阅读
    用AWTK和AWPLC<b class='flag-5'>快速</b><b class='flag-5'>开发</b>嵌入式<b class='flag-5'>应用程序</b> (1)-温度控制器

    【Z站推荐】用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (2)-走马灯

    ,是ZLG开发的开源GUI引擎,旨在为嵌入式系统、WEB、各种小程序、手机和PC打造的通用GUI引擎,为用户提供一个功能强大、高效可靠、简单
    的头像 发表于 10-13 14:38 396次阅读
    【Z站推荐】用 AWTK 和 AWPLC <b class='flag-5'>快速</b><b class='flag-5'>开发</b>嵌入式<b class='flag-5'>应用程序</b> (2)-走马灯

    【产品应用】用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (4)- 自定义功能块(上)

    为嵌入式系统、WEB、各种小程序、手机和PC打造的通用GUI引擎,为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的GUI引擎。AWPLC是ZLG自主
    的头像 发表于 11-02 09:56 421次阅读
    【产品应用】用 AWTK 和 AWPLC <b class='flag-5'>快速</b><b class='flag-5'>开发</b>嵌入式<b class='flag-5'>应用程序</b> (4)- 自定义<b class='flag-5'>功能</b>块(上)

    【产品应用】用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (3)- 定时器

    ToolkitAnyWhere,是ZLG开发的开源GUI引擎,旨在为嵌入式系统、WEB、各种小程序、手机和PC打造的通用GUI引擎,为用户提供一个
    的头像 发表于 11-02 10:02 446次阅读
    【产品应用】用 AWTK 和 AWPLC <b class='flag-5'>快速</b><b class='flag-5'>开发</b>嵌入式<b class='flag-5'>应用程序</b> (3)- 定时器

    【产品应用】用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (2)-走马灯

    ,是ZLG开发的开源GUI引擎,旨在为嵌入式系统、WEB、各种小程序、手机和PC打造的通用GUI引擎,为用户提供一个功能强大、高效可靠、简单
    的头像 发表于 06-08 10:13 354次阅读
    【产品应用】用 AWTK 和 AWPLC <b class='flag-5'>快速</b><b class='flag-5'>开发</b>嵌入式<b class='flag-5'>应用程序</b> (2)-走马灯

    LVGL结合RT-thread快速开发出漂亮GUI的利器GUI-Guider

    GUI-Guider是一种功能强大的软件,它为用户提供了一种简单直观的方式来创建和设计图形用户界面GUI)。
    的头像 发表于 11-14 12:38 1538次阅读
    LVGL结合RT-thread<b class='flag-5'>快速</b><b class='flag-5'>开发出</b>漂亮<b class='flag-5'>GUI</b>的利器<b class='flag-5'>GUI</b>-Guider