初探在Pycharm中使用QT开发GUI页面,安装配置以完整项目代码

目录

由于项目要求最近在看GUI开发的一些知识,在了解了Python的tkinter库跟QT之后,分别做了一版。其中QT更便于上手,功能更加丰富,开发速度与可维护性都比较好,所以对Python 开发QT做一个长期的学习记录。

本文章包括所用到的组件安装,以及将一个新项目从创立到打包成exe可执行程序的全过程。

QT and PyQt5 介绍

QT是跨平台的C++开发库,主要用来开发用户图形界面程序(GUI),当然它的功能不止与此,还可以用来绘制漂亮的界面(包括控件,交互,布局),处理多线程,访问数据库,图像跟音视频的处理,网络通信,文件操作等。

Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具开发界面的使用方法。

PyQt5是使用Python语言根据QT设计的为了在Python上使用的,本文使用的是Python3。

PyQt5的类别分为几个模块,包括以下:

  • QtCore
    包含了核心的非GUI功能。此模块用于处理时间、文件和目录、各种数据类型、流、URL、MIME类型、线程或进程。
  • QtGui
    包含类窗口系统集成、事件处理、二维图形、基本成像、字体和文本。
  • qtwidgets
    模块包含创造经典桌面风格的用户界面提供了一套UI元素的类。
  • QtMultimedia
    包含的类来处理多媒体内容和API来访问相机和收音机的功能。
  • Qtbluetooth
    模块包含类的扫描设备和连接并与他们互动。描述模块包含了网络编程的类。这些类便于 TCP和IP和UDP客户端和服务器的编码,使网络编程更容易和更便携。
  • Qtpositioning
    包含类的利用各种可能的来源,确定位置,包括卫星、Wi-Fi、或一个文本文件。
  • Enginio
    模块实现了客户端库访问Qt云服务托管的应用程序运行时。
  • Qtwebsockets
    模块包含实现WebSocket协议类。
  • QtWebKit
    包含一个基于Webkit2图书馆Web浏览器实现类。
  • Qtwebkitwidgets
    包含的类的基础webkit1一用于qtwidgets应用Web浏览器的实现。
  • QtXml
    包含与XML文件的类。这个模块为SAX和DOM API提供了实现。
  • QtSvg
    模块提供了显示SVG文件内容的类。可伸缩矢量图形(SVG)是一种描述二维图形和图形应用的语言。。
  • QtSql
    模块提供操作数据库的类
  • QtTest
    包含的功能,使pyqt5应用程序的单元测试

安装

请自行安装pycharm并且配置Python

创建一个完整项目

使用QTDesigner设计UI界面

  • 打开

这里是引用

  • 界面介绍
    在这里插入图片描述
    菜单栏 区域:用来新建窗口,保存,提供布局快捷键
    拖拽组件 区域 :提供Gui界面开发各种基本控件,如单选框、文本框、按钮等。可以拖动到新创建的主程序界面。在后续的文章中将介绍各个组件的作用

    控件对象列表 区域 :查看主窗口放置的对象列表。

    控件属性更改 区域: 提供对窗口、控件、布局的属性编辑功能。比如修改控件的显示文本、对象名、大小等。下面的编辑控件的信号和槽函数,也可以添加自定义的信号和槽函数。

  • 步骤
    1.新建一个空白窗口
    在这里插入图片描述
    在这里插入图片描述
    2.拖入组件,并调整属性,这里我们用一个简单的例子,只包括一个按钮,一个标签跟两个文本框(输入输出)
    在这里插入图片描述
    在这里插入图片描述
    3来点击保存/另存为,会生成一个.ui文件,这里我命名为’example_ui’
    在这里插入图片描述

编写py文件来组合UI界面跟业务逻辑

  1. 首先需要将.ui文件更改为.py文件
    使用命令行pyuic5 -o example_ui.py example_ui.ui转换成.py文件。调用格式为pyuic5 -o {输出文件名} {输入designer设计好的.ui后缀界面文件}。得到的.py文件如下
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'example_ui.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(315, 206)
        self.layoutWidget = QtWidgets.QWidget(Form)
        self.layoutWidget.setGeometry(QtCore.QRect(50, 50, 201, 111))
        self.layoutWidget.setObjectName("layoutWidget")
        self.formLayout = QtWidgets.QFormLayout(self.layoutWidget)
        self.formLayout.setContentsMargins(0, 0, 0, 0)
        self.formLayout.setObjectName("formLayout")
        self.textBrowser = QtWidgets.QTextBrowser(self.layoutWidget)
        self.textBrowser.setObjectName("textBrowser")
        self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.textBrowser)
        self.pushButton = QtWidgets.QPushButton(self.layoutWidget)
        self.pushButton.setObjectName("pushButton")
        self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.pushButton)
        self.textEdit = QtWidgets.QTextEdit(self.layoutWidget)
        self.textEdit.setObjectName("textEdit")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.textEdit)
        self.label = QtWidgets.QLabel(self.layoutWidget)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "完成"))
        self.label.setText(_translate("Form", "请输入:"))

2.因为生成的代码块只是UI界面的部分,具体的将界面展示以及逻辑串联还需要进一步的工作,为了后续的维护方便,实现逻辑清晰,将页面与业务逻辑相分离,新建一个example_main.py文件,调用example_ui文件
首先保持窗口可执行

# 导入程序运行必须模块
import sys
# PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import QApplication, QMainWindow
# 导入designer工具生成的login模块
from example_ui import Ui_Form


class MyMainForm(QMainWindow, Ui_Form):
    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)

        self.setupUi(self)


if __name__ == "__main__":
    # 固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
    app = QApplication(sys.argv)
    # 初始化
    myWin = MyMainForm()
    # 将窗口控件显示在屏幕上
    myWin.show()
    # 程序运行,sys.exit方法确保程序完整退出。
    sys.exit(app.exec_())

点击运行,效果如下图:
在这里插入图片描述
3.此时点击按钮还没有任何反应,再写一个简单的逻辑来点击’完成’按钮时,输出框输出输入的值
加入逻辑:

# 导入程序运行必须模块
import sys
# PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import QApplication, QMainWindow
# 导入designer工具生成的login模块
from example_ui import Ui_Form


class MyMainForm(QMainWindow, Ui_Form):
    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)
        self.setupUi(self)
        #给按钮添加点击事件,调用display函数
        self.pushButton.clicked.connect(self.display)
    def display(self):
        #利用toPllainText()来获取textEdit的输入值
        MyInput = self.textEdit.toPlainText()
        #利用setText()来对textBrowser控件输出值
        self.textBrowser.setText(MyInput)
if __name__ == "__main__":
    # 固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
    app = QApplication(sys.argv)
    # 初始化
    myWin = MyMainForm()
    # 将窗口控件显示在屏幕上
    myWin.show()
    # 程序运行,sys.exit方法确保程序完整退出。
    sys.exit(app.exec_())

运行效果如下图:
在这里插入图片描述
这样就完成了, 在输出框展示通过按钮点击获取输入框的时间,使用以上知识就可以完成一些简单的功能开发了。

将py文件打包成exe程序

首选安装pyinstaller在这里插入图片描述
执行打包在这里插入图片描述
等待完成后,在相应的目录下就可以看到EXE文件及相关配件信息
在这里插入图片描述.
.exe在dist中

PyInstaller 支持的常用选项

指令作用
-F,-onefile产生单个的可执行文件
-D,–onedir产生一个目录(包含多个文件)作为可执行程序
-a,–ascii不包含 Unicode 字符集支持
-d,–debug产生 debug 版本的可执行文件
-w,–windowed,–noconsolc指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,–nowindowed,–console指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,–out=DIR指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,–path=DIR设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME,–name=NAME指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字
  • 8
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值