文章目录

  • ⛳️ 图形用户界面
  • ⛳️ PyQt 安装和 designer 工具
  • 🔥 designer 工具
  • ⛳️ PyQt Hello World
  • 🔥 完善窗体
  • 🔥 学习组件
  • ⛳️ 组件学习
  • 🔥 Label 组件
  • 🔥 Line Edit 组件
  • 🔥 Date/Time 组件
  • 🔥 Check Box 组件
  • 🔥 Combo Box 组件
  • 🔥 List View 组件
  • 🔥 Tree View 和 Table View 组件


⛳️ 图形用户界面

常见软件操作界面有三类,第一种是 DOS 界面,即黑控制台,第二中是 Windows 为主的图形用户界面,第三种是在网页中呈现的 Web 用户界面,在本篇博客我们会以 PyQt5 为主,实现 Windows 操作系统界面风格的 Python 软件。

在正式开始前,依旧是准备知识的学习,第一点是图形用户界面,英文名为 Graphical User Interface,简称 GUI,也叫做图形用户接口,大白话就是用图形方式显示计算机操作。

任意一图形界面都包括如下概念。

  • 组件(Components):按钮,复选框,下拉列表,输入框这些都被称为组件;
  • 窗体(Form):组件依托于窗体展现和执行;
  • 事件(Event):按钮的单击事件,双击事件,窗体的最大化,最小化事件;
  • 属性(Property):属性是窗体或者组件可编辑的值,例如标题,文字颜色,文字大小,背景图片;
  • 方法(Methods):方法是窗体或组件可调用的函数

掌握上述概念之后,就可以使用第三方模块进行程序开发了,常见的 GUI 开发包有如下内容。

  • tkinter:Python 内置的 GUI 开发包;
  • PySide:免费开源第三方包,主要对手是 PyQt,推荐;
  • wxPython:跨平台 GUI 工具包;
  • PyQt:一款基于 Qt 框架的 GUI 工具包,推荐;
  • PyGTK:开源免费工具包,底层的 GTK+提供了各式的可视元素和功能;
  • PyGObject:GUI 工具包。

各个工具包之间的差异不是很大,本篇博客重点为大家介绍 PyQt。

⛳️ PyQt 安装和 designer 工具

PyQt 的安装分为三种情况,分别如下所示。

第一种:命令行安装

在控制台输入下述命令,安装最新版本的 PyQt5。

pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/

除此之外,还需要搭配 pyqt5-tools 进行界面设计。

pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/

第二种:下载软件安装
去 pip 官方查找对应的下载地址,下载完毕之后进行安装即可。

第三种:在 Anaconda 包中安装
如果你本地使用的是 Anaconda,那安装本软件之后,默认已经安装了 PyQt5 相关的工具包,直接使用即可。

界面设计工具 designer.exe 在目录 \Anaconda3_202011\Library\bin 中,可以查找到点击运行即可。

python分为 python分为哪两种界面_python分为

🔥 designer 工具

直接启动 designer.exe 之后,默认弹窗如下所示。

python分为 python分为哪两种界面_pyqt5_02


使用该软件可以大幅度降低我们设计窗体的效率,选择 Main Window 之后,点击创建按钮,即可进入窗体设计页面,

Designer 工具设计的窗体文件默认扩展名为 .ui

接下来看一下 designer 这款工具的界面布局,这有利于后续设计软件界面。

窗体 MainWindow,可以摆放各种组件

python分为 python分为哪两种界面_python分为_03


组件库 Widget Box,可以拖动出各种组件

python分为 python分为哪两种界面_python qt_04


对象查看器,属性编辑器,资源浏览器,信号/槽编辑,动作编辑器,可以设计窗体,组件的属性,可以查看窗体对象

python分为 python分为哪两种界面_python分为_05


功能菜单,功能快捷键

python分为 python分为哪两种界面_开发语言_06


这四个区域在后续 Windows 界面设计中,都会应用到,初学过程中可以勇于尝试,大胆点击。

⛳️ PyQt Hello World

接下来实现第一个 Window 桌面程序,在 MainWindow 中添加一个按钮和一个 Hello World 文本框,最终实现的效果如下所示。

python分为 python分为哪两种界面_python_07


实现步骤如下所示。

  1. 从左侧 Display Widgets 展示组件中,选择 Label,长按鼠标左键,拖动到 MainWindow,然后双击编辑文本为 Hello World;
  2. 从左侧 Buttons 组件组中,选择 Push Button 组件,长按鼠标左键,拖动到 MainWindow,双击修改按钮文本为 【第一个按钮】。

通过这两个步骤,你会发现使用拖动方式设置组件,大幅度提高了代码编写效率。

按下快捷键 Ctrl+S 保存代码,文件名为 Main.ui,接下来将 .ui 文件转换为 .py 文件,使用的命令为 pyuic5,在 Main.ui 所在目录执行下述命令。

pyuic5 -o PMain.py Main.ui

命令运行完毕,会生成一个 PMain.py 文件,打开之后可以看到 Python 代码,部分代码截取展示如下。

def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    self.label.setText(_translate("MainWindow", "Hello World"))
    self.pushButton.setText(_translate("MainWindow", "第一个按钮"))

下面就需要新建一个 Python 文件,命名为 CaApp.py,然后调用 PMain.py 文件。

import sys
from PyQt5.QtWidgets import QApplication,QMainWindow
import PMain # 导入刚刚生成的Python 文件

if __name__ == '__main__':
    app = QApplication(sys.argv) # 创建应用程序实例
    MainWindow = QMainWindow() # 创建主窗口实例
    ui = PMain.Ui_MainWindow() # 创建刚刚设计的 Main 窗口实例
    ui.setupUi(MainWindow) # 将 PMain 窗体与 MainWindow 合并
    MainWindow.show()
    sys.exit(app.exec_()) # 执行退出命令

此时运行代码,就可以看到刚刚设计的窗体。

🔥 完善窗体

下面通过 designer 工具完善窗体属性,首先修改窗体的标题和图标。

修改 windowTitle 属性

python分为 python分为哪两种界面_python分为_08


修改窗体 icon 属性,即 windowIcon 属性

python分为 python分为哪两种界面_python qt_09


上述两个属性修改完毕,再次运行下述命令。

pyuic5 -o PMain.py Main.ui

生成界面的 Python 代码之后,就可以重新运行 CaApp.py 文件,得到最新的窗体视图了。

python分为 python分为哪两种界面_python qt_10

🔥 学习组件

使用 PyQt5 工具包最重要的就是熟悉组件,然后掌握各个组件的属性,在 designer 中,内置了大量可直接拖拽的组件,具体分类如下。

  • Layout:布局相关组件;
  • Spacers:分割组件,水平线和垂直线;
  • Buttons:按钮组件;
  • Item Views:选项视图组件;
  • Item Widgets:选项小组件;
  • Containers:容器组件;
  • Input Widgets:输入组件;
  • Display Widgets:展示组件。

一个标准的组件重点要关注三方面,分别是属性,方法,事件。下面我们拿一个按钮组件 PushButton 举例学习。

拖拽一个新组件到 Main.ui 窗体中。

先学习按钮的相关属性。

Push Button 常用属性如下。

  • objectName:按钮名称,对象名称,唯一;
  • text:按钮显示文本;
  • icon:按钮小图标;
  • font:设置按钮上字体相关属性;
  • styleSheet:设置背景色,字体颜色;
  • enabled:启用状态属性。

Push Button 按钮方法调用。

调用组件方法,需要将 .ui 文件转换为 .py 文件,然后通过对象调用其方法,例如下图所示内容,通过窗体对象或者按钮对象,然后通过 . 调用其方法。

python分为 python分为哪两种界面_python分为_11


Push Button 按钮事件

PyQt5 组件的事件由信号(Signal)和槽(Slot)实现,信号用于发送组件的事件处理命令,槽接收并处理事件操作内容。

还是拿按钮举例,按钮有 click() 鼠标单击事件,单击事件就是信号,自定义单击事件处理函数就是槽,下面我们通过信号/槽编辑器设置鼠标事件。

python分为 python分为哪两种界面_python qt_12


接下来是操作步骤,第一次操作的时候,一定要注意各步骤顺序。选中要操作的按钮之后,点击快捷工具栏中的【编辑信号/槽】按钮,下图箭头指向的图标。

python分为 python分为哪两种界面_开发语言_13


然后选中按钮按住鼠标左键,拖动出一个【地线】出来,如下图所示。

python分为 python分为哪两种界面_python qt_14


此时 PyQt5 会弹出一个配置连接的窗体,点击左侧的 clicked(),右侧出现空白窗体。

python分为 python分为哪两种界面_python qt_15


下面可以点击编辑按钮,添加槽函数,再新弹出的窗口中点击绿色【+】号,然后输入 show_box() 函数名。

python分为 python分为哪两种界面_pyqt5_16


返回配置连接页,选中 show_box() 函数名,点击 OK,完成信号/槽配置。

python分为 python分为哪两种界面_开发语言_17


完全编辑完毕呈现如下状态。

python分为 python分为哪两种界面_pyqt5_18


此时再次执行将 .ui 文件转换为 .py 文件的命令。

pyuic5 -o PMain.py Main.ui

比对代码发现多了下图所示内容,此时还需要进行一点点的修改,即将 MaiWindow.btn_click 修改为 self.btn_click

python分为 python分为哪两种界面_pyqt5_19


同时将自定义函数 btn_click 内容补充并实现弹窗提示。

def btn_click(self):
     QtWidgets.QMessageBox.information(self.pushButton_2,"弹窗","弹窗内容")

打开 CaApp.py 点击运行代码,查看一下运行结果,下图是成功运行的结果。

python分为 python分为哪两种界面_python_20


信号/槽学习完毕,可以再补充一下事件类型相关知识点。

鼠标相关

  • Clicked:单击事件;
  • Pressed:左键按压事件;
  • Released:左键释放事件;
  • Toggled:控件状态改变时触发事件;
    键盘相关
  • textChanged:文本变化事件;
  • textEdited:文本编辑事件;
  • cursorPositionChanged:光标位置变化事件;
  • returnPressed:回车事件;
  • selectionChanged:下拉列表变化。

⛳️ 组件学习

掌握 PyQT5 桌面开发,最快捷的路线是依次学习常用组件,接下来我们就从简单组件入手,为你依次介绍各个组件。

🔥 Label 组件

标签组件,文本组件,该组件核心功能是在界面上提供文字展示功能,其在组件盒的 Display Widgets 分组中。

python分为 python分为哪两种界面_python分为_21


Label 拖拽之后的,重点关注属性编辑器,其重要属性值如下。

  • objectName:组件名称,设置该值之后可以很方便的在代码中调用该组件;
  • text:展示文本;
  • font:设置字体样式。

除了上述三个重要属性外,还可以给 Label 组件设置图片,即属性编辑器中的 pixmap

python分为 python分为哪两种界面_python_22


点击该属性右侧的下拉三角,在弹出的菜单中选择文件,在电脑中选择对应图片即可完成设置,此时会发现图片仅显示了局部,可以通过修改属性编辑器中的 scaledContents 属性,将其修改为 True。即可实现图片自适应。

python分为 python分为哪两种界面_python_23


python分为 python分为哪两种界面_python分为_24


Label 组件还提供了简易外观设置,对应的属性是 QFrame 分组中的 frameShape 属性,可以选择如下内容。

  • Box:增加边框;
  • Panel:三维样式,需要将 frameShadow 设置为 Raised,可以查看效果;
  • Hline:水平居中线;
  • Vline:垂直居中线。

测试效果如下所示。

python分为 python分为哪两种界面_开发语言_25

🔥 Line Edit 组件

单行输入框组件,该组件结合 Label 组件,可以快速实现一个登录窗口,如下所示。

python分为 python分为哪两种界面_python qt_26


Line Edit 组件可以设置 placeholderText 属性,展示用户提示信息。学习时可以对 Line Edit 组件设置信号/槽,然后查看其事件,如下图所示。

python分为 python分为哪两种界面_python分为_27

🔥 Date/Time 组件

日期/时间组件,也是我们经常接触的一类组件,其包括 Time Edit,Date Edit,Date/Time Edit 三个组件。

python分为 python分为哪两种界面_python qt_28


这三个组件默认展示风格是英国的,需要手动进行设置,在属性编辑器中找到 displayFormat 属性,可以对其进行修改,这里仅拿 Date/Time Edit 举例,修改上述属性值为:yyyy 年 M 月 d 日 H 时 mm 分 ss 秒,即可得到下述效果。

python分为 python分为哪两种界面_pyqt5_29

🔥 Check Box 组件

复选框组件可以解决用户的多选问题,在 Buttons 分组中拖拽 Check Box 组件到窗体中,然后设置 checked 属性为 True,即选中状态。

python分为 python分为哪两种界面_开发语言_30

🔥 Combo Box 组件

下拉选择框组件,也被成为下拉列表,拖拽该组件到窗体中,直接双击即可编辑可选项,如果设置出错,可以继续双击进行修改

python分为 python分为哪两种界面_python qt_31


为了学习 Combo Box 组件的相关事件,可以切换到信号/槽设置,然后拖拽出【地线】,在弹出的配置连接窗口可以看到其内置好的所有事件名称。

python分为 python分为哪两种界面_pyqt5_32


除此之外,Combo Box 组件还提供了一些常用方法,清单如下。

  • additem(v):添加项;
  • additems(v):批量添加元素;
  • clear():删除所有值;
  • count():统计值的个数;
  • currentText():返回选中的值;
  • currentIndex():返回选中的索引。

🔥 List View 组件

列表选择器组件可以为窗体提供一竖列数据的显示和选取功能,从组件库拖拽一个 List View 到界面中,然后在组件上点击鼠标右键,选择 变型为,之后选择 QListWidgets,接下来的操作就是双击组件,然后编辑内容了,最终得到的效果如下所示。

python分为 python分为哪两种界面_python分为_33


List View 组件常用的方法如下。

  • setModel():设置列表视图的数据模型;
  • selectedItem():获取鼠标选中项目;
  • isSelected():判断列表中某条数据是否被选中。

List View 组件常用的事件信号如下。

  • clicked():单击事件;
  • doubleClicked:双击事件。

更多事件信号依旧采用切换到信号/槽视图,然后拉出地线弹窗查看。

🔥 Tree View 和 Table View 组件

Tree View

树状视图,也叫做树表结构,是以树状图的形式显示数据项,最常见的就是 windows 操作系统的文件目录结构。

在 designer 中拖拽 Tree View 到界面中,然后选择变型为 QTreeWidgets,接下来依旧是双击编辑项目,然后输入对应内容,完成树表数据添加。

添加数据的时候注意列和项目,依次添加最终得到如下效果。

python分为 python分为哪两种界面_开发语言_34

Table View

最后一个要给大家介绍的组件是表视图,就是表格,它可以分行分列展示数据,其在编码时核心通过 setModel(model) 方法绑定数据模型。

拖拽 Table View 组件到窗体中,然后设置变型为 QTableWidgets,接下来双击组件就可以添加行列数据了。

python分为 python分为哪两种界面_python分为_35


注意在编辑的时候,需要现有行列,再有项目。

python分为 python分为哪两种界面_开发语言_36

【梦想橡皮擦】