1 基本介绍
1.1 简介
,QT 是最强大的 GUI 库之一,PyQt 是 Python 绑定 QT 应用的框架,是最强大和流行的跨平台 GUI 库之一。
PyQt 兼容所有流行的操作系统,包括 Windows、Linux 和 Mac OS。 它是双重许可的,可在 GPL 和商业许可下使用。新的稳定版本是 PyQt5,最新版本的 PyQt 可从其官网下载 − riverbankcomputing.com
PyQt API 是一组包含大量类和函数的模块:
QtCore − 其他模块使用的核心非 GUI 类
QtGui − 图形用户界面组件
QtMultimedia − 低级多媒体编程类
QtNetwork − 网络编程类
QtOpenGL − OpenGL 支持类
QtScript − 用于评估 Qt 脚本的类
QtSql − 使用 SQL 进行数据库集成的类
QtSvg − 显示 SVG 文件内容的类
QtWebKit − 用于呈现和编辑 HTML 的类
QtXml − 处理 XML 的类
QtWidgets − 用于创建经典桌面风格 UI 的类
QtDesigner − 用于扩展 Qt Designer 的类
1.2 安装
1)mac下安装
pip3 install PyQt5 -i https://pypi.douban.com/simple
执行以下代码验证安装是否成功
代码如下:
import sys
from PyQt5.QtWidgets import QWidget, QApplication
app = QApplication(sys.argv)
widget = QWidget()
widget.resize(640, 480)
widget.setWindowTitle("Hello, PyQt5!")
widget.show()
sys.exit(app.exec())
2)安装QtTools(这个工具看需要安装,可以直接安装下面第三步的)
Qt Tools 包含:
- 图形界面设计工具 Qt Designer,用于设计图形界面,生成 .ui文件,以 xml 格式存储界面和控件的属性;
- UI 文件转换工具 PyUic,用于将 .ui 文件解析为 .py 文件的工具。
Qt Tools 可以使用 pip 方式安装:
pip3 install PyQt5-tools -i https://pypi.douban.com/simple
3)VSCODE插件配置
找到Designer.app
/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/qt5_applications/Qt
配置一下启动脚本
将脚本复制到 Designer.app 同级目录下,并将其路径配置到编辑器中即可
可用性验证
1.3 插件使用
1)创建new window
2)拖拽组件
3)保存成gui文件
4)生成对应的 py 文件
5)运行
添加下列代码
6)继续修改
7)每次更新都会覆盖,单独创建启动目录
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
import Ui_tool
app = QtWidgets.QApplication(sys.argv) # 实例化 QApplication 类,作为 GUI 主程序入口
MainWindow = QtWidgets.QMainWindow() # 创建 MainWindow 类
ui = Ui_tool.Ui_MainWindow() # 实例 UI 类
ui.setupUi(MainWindow) # 设置窗体 UI
MainWindow.show() # 显示窗体
sys.exit(app.exec_()) # 当窗口创建完成,需要结束主循环过程
2 基本开发
2.1 常用组件
2.1.1 QComboBox
1)常用方法列表
方法 | 描述 |
---|---|
addItem() | 添加一个下拉选项 |
addItems() | 从列表中添加下拉选项 |
clear() | 删除下拉选项集合中的所有选项 |
count() | 返回下拉选项集合中的数目 |
currentText() | 返回选中选项的文本 |
itemText(i) | 获取索引为i的item的选项文本 |
currentIndex() | 返回选中项的索引 |
setItemText(int index,text) | 更改指定索引的文本 |
2)常用信号(交互信息发送)
信号 | 含义 |
---|---|
Activated | 当用户选中一个下拉选项时发射该信号 |
currentIndexChanged | 当下拉选项的索引发生改变时发射该信号 |
highlighted | 当选中一个已经选中的下拉选项时,发射该信号 |
3)实例
2.1.2 QComboBox
QLineEdit
- QLineEdit是一个单行文本编辑控件;
- QLineEdit相关的一个类是QTextEdit,它允许多行文字以及富文本编辑;
QTextEdit
- QTextEdit可以显示多行、用来显示图像、列表和表格;
1)QLineEdit常用方法:
方法 | 描述 |
text() | 取值 |
setText() | 赋值 |
setAlignment() | 根据对齐常量对齐文本 |
clear() | 删除内容 |
setMaxLength() | 设置输入的最大字符数 |
setReadOnly() | 使文本框不可编辑 |
setValidator() | 验证校验,可以正则校验 |
2)QLineEdit常用信号:
信号 | 含义 |
cursorPositionChanged() | 每当光标移动触发 |
editingFinished() | 当您按"Enter"或字段失去焦点时 |
returnPressed() | 当你按下"Enter" |
selectionChanged() | 每当所选文本发生变化时 |
textChanged() | 当框中的文本通过输入或编程方式更改时 |
textEdited() | 每当编辑文本时 |
3)实例
2.1.3 QPushButton
在 PyQt API 中,QPushButton 类对象提供了一个按钮,当单击该按钮时,可以对其进行编程以调用某个函数。
1)常用方法
方法 | 描述 |
setCheckable() | 如果设置为 true,则识别按钮的按下和释放状态 |
toggle() | 在可检查状态之间切换 |
setIcon() | 显示由图像文件的像素图形成的图标 |
setEnabled() | 当设置为 false 时,按钮变为禁用状态,因此单击它不会发出信号 |
isChecked() | 返回按钮的布尔状态 |
setDefault() | 将按钮设置为默认值 |
2)实例
2.1.4 QMenuBar、QMenu 和 QAction
QMenu 类提供了一个可以添加到菜单栏的小部件。 它还用于创建上下文菜单和弹出菜单。 每个 QMenu 对象可能包含一个或多个 QAction 对象或级联的 QMenu 对象。
。。。。。。
bar = self.menuBar()
file = bar.addMenu("File")
file.addAction("New")
save = QAction("Save",self)
save.setShortcut("Ctrl+S")
file.addAction(save)
edit = file.addMenu("Edit")
edit.addAction("copy")
edit.addAction("paste")
quit = QAction("Quit",self)
file.addAction(quit)
file.triggered[QAction].connect(self.processtrigger)
self.setLayout(layout)
self.setWindowTitle("menu demo")
def processtrigger(self,q):
print q.text()+" is triggered"
2.1.5 其余常用组件
PyQt5 - 基本小部件
2.2 IP查询核心功能实现
实现输入IP查询IP的所属信息,用于IP资产列表(excel)的维护
1)windows.py
2) 添加Ip和查询IP
3)excel操作
import xlrd,xlwt
from xlutils.copy import copy
def addIP(ip,describe):
workbook = xlrd.open_workbook("ip.xlsx",encoding_override="utf-8")
# 获取原表格第一个sheet的名字
all_sheet = workbook.sheet_names()
first_sheet = workbook.sheet_by_name(all_sheet[0])
# 获取原表格第一个sheet一写入数据的行数
rows = first_sheet.nrows
# 拷贝新的excel,并从rows行开始追加写入
new_workbook = copy(workbook)
new_sheet = new_workbook.get_sheet(0)
new_sheet.write(rows, 0, ip)
new_sheet.write(rows, 1, describe)
new_workbook.save("ip.xlsx")
def createExcel():
testbook = xlwt.Workbook(encoding='utf-8')
testbook.add_sheet('ip')
testbook.save("ip.xlsx")
def findIP(ip):
workbook = xlrd.open_workbook("ip.xlsx",encoding_override="utf-8")
# 获取原表格第一个sheet的名字
all_sheet = workbook.sheet_names()
first_sheet = workbook.sheet_by_name(all_sheet[0])
rows = first_sheet.nrows
describe = "none"
for i in range(rows):
row = first_sheet.row_values(i)
if ip in row[0]:
describe = row[1]
return describe
核心逻辑实现完成,可以完成基本查询需要