如何用 PyQt5 快速构建一个简单的 GUI 应用

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

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 两个文件,配置进去

如何用 PyQt5 快速构建一个简单的 GUI 应用

 

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

如何用 PyQt5 快速构建一个简单的 GUI 应用

 

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

 

如何用 PyQt5 快速构建一个简单的 GUI 应用

 

3. 常用功能介绍

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

如何用 PyQt5 快速构建一个简单的 GUI 应用

 

QtDesigner 主要包含下面 6 部分:

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

其中,

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

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

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

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

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

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

4.来个例子

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

如何用 PyQt5 快速构建一个简单的 GUI 应用

 

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

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

如何用 PyQt5 快速构建一个简单的 GUI 应用

 

第 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 界面的逻辑,实际项目开发过程中很少变动。

 

如何用 PyQt5 快速构建一个简单的 GUI 应用

 

5.总结

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 PyQt5 嵌入另一个 exe 的 GUI 界面可以使用 QProcess 类。QProcess 类可以用来启动和控制外部进程,并且可以通过信号和槽来获取进程的输出和错误信息。 具体实现方法如下: 1. 创建一个 QProcess 对象 2. 设置要启动的 exe 程序的路径 3. 启动进程 4. 在进程启动后,使用信号和槽来获取进程的输出和错误信息 5. 使用 QProcess 对象的 finished() 信号来检测进程是否结束 详细实现步骤可以参考 PyQt5 官方文档中关于 QProcess 类的说明。 ### 回答2: 在PyQt5中实现嵌入另一个exe的GUI界面可以通过使用QAxContainer模块来实现。QAxContainer模块允许我们在PyQt5应用程序中嵌入并控制外部程序。 首先,需要在Python脚本中导入所需的模块: ``` from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtAxContainer import QAxWidget ``` 然后,创建一个PyQt5应用程序并主窗口: ``` app = QApplication([]) window = QMainWindow() window.setGeometry(100, 100, 500, 500) # 设置窗口大小 ``` 接下来,创建一个QAxWidget对象来嵌入外部exe的GUI界面: ``` widget = QAxWidget() widget.setControl('ProgID') # 替换'ProgID'为要嵌入的外部程序的ProgID widget.setProperty('DisplayAlerts', False) # 可选的,用于控制外部程序的属性 widget.setParent(window) widget.setGeometry(0, 0, 500, 500) # 设置widget对象的位置和大小 ``` 最后,显示主窗口并执行应用程序: ``` window.show() app.exec_() ``` 在以上代码中,需要将'ProgID'替换为要嵌入的外部程序的ProgID。例如,如果要嵌入Internet Explorer,可以将'ProgID'设置为'Shell.Explorer'。 这样,就可以在PyQt5应用程序中嵌入另一个exe的GUI界面了。 ### 回答3: PyQt5是一种Python绑定的Qt框架,可以用于开发跨平台的图形用户界面(GUI应用程序。在PyQt5中,我们可以轻松地实现嵌入另一个exe程序的GUI界面。 实现这一功能的关键在于使用QProcess类,该类可以启动一个外部进程,并与之进行通信。下面是实现的步骤: 1. 首先,我们需要导入PyQt5库,并创建一个应用程序。 2. 创建一个QProcess对象,并设置要启动的exe程序路径。 3. 通过调用QProcess的start方法来启动该进程。 4. 在需要嵌入GUI界面的地方,创建一个QWidget对象,并在该对象上设置布局。 5. 创建一个QWindow对象,并将其作为父对象传递给QWidget的setParent方法。 6. 调用QWidget的createWinId方法获取QWidget的窗口ID,并将其作为参数传递给QProcess的setNativeParent方法。 7. 调用QWidget的winId方法获取窗口ID,并将其作为参数传递给QProcess的start方法。 通过上述步骤,我们可以实现将另一个exe程序的GUI界面嵌入到我们的应用程序中。需要注意的是,嵌入的程序必须使用Qt库来构建GUI界面。 通过PyQt5实现嵌入另一个exe程序的GUI界面可以有效地提高应用程序的可扩展性和复用性。我们可以将其他已有的GUI程序嵌入到我们的应用程序中,从而实现更加丰富和灵活的功能。 总而言之,使用PyQt5可以轻松地实现嵌入另一个exe程序的GUI界面。通过使用QProcess类和QWidget类的相关方法,我们可以将其他程序的GUI界面嵌入到我们的应用程序中,从而实现更加丰富和灵活的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值