• 如何用 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 图形用户界面

  • 相关阅读:
    BeautifulSoup的基本用法
    打印实例
    webservice和一般处理程序
    C# 后台调用存储过程
    表格增加删除
    asp.net C# 获得配置文件AppSettings 的值
    深入浅出zookeeper(一)
    resource下的excel文件下载被损害
    csdn添加目录
    spring面试题,求求你别问我spring了!
  • 原文地址:https://www.cnblogs.com/hhh188764/p/13153025.html
Copyright © 2020-2023  润新知