- Python知识点总结(1)
- Python知识点总结(2)
- Python开发案例(学生信息管理系统)
- Python图形界面开发——PySide2库
目录
1. 简介与安装
2. 基本结构
导入需要的库
程序主体内容
程序启动维持
3. 使用designer开发图形界面
4. 打包发布
基于Qt 的Python库(PySide2(Qt亲儿子,自己开发的库)、PyQt5(Qt干儿子,收购的库)):
优点:控件比较丰富、跨平台体验好、文档完善、用户多。
缺点: 库比较大,发布出来的程序比较大。
调用cmd,安装PySide2的语句:
pip install PySide2
案例:
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit,QMessageBox
'''
QtWidgets 专门负责Qt里控件窗口的图形功能
下属类:
QApplication 应用程序
QMainWindow 主窗口
QPushButton 按钮
QPlainTextEdit 纯文本的编辑框
QMessageBox 弹出对话框
'''
案例:
class Stats:
# 设定窗口本身特性
def __init__(self):
self.window = QMainWindow() # 创建主窗口,定义主窗口
self.window.resize(500, 400) # 定义初始化大小
self.window.move(300, 310) # 启动程序的窗口位置,距离左边和上边的距离
self.window.setWindowTitle('薪资统计') # 窗口标题栏名称
self.textEdit = QPlainTextEdit(self.window) # 创建文本编辑框
self.textEdit.setPlaceholderText("请输入薪资表") # 文本编辑框的提示文本
self.textEdit.move(10, 25) # 编辑框位置,距离父窗口的左边和上边的距离
self.textEdit.resize(300, 350) # 文本框大小
self.button = QPushButton('统计', self.window) # 创建按钮
self.button.move(380, 80) # 按钮位置
self.button.clicked.connect(self.handleCalc) # 将信号通过槽 slot 连到 handleCalc. 用handleCalc处理点击事件
# 内置方法——程序执行内容
def handleCalc(self):
info = self.textEdit.toPlainText()
# 薪资20000 以上 和 以下 的人员名单
salary_above_20k = ''
salary_below_20k = ''
for line in info.splitlines():
if not line.strip():
continue
parts = line.split(' ')
# 去掉列表中的空字符串内容
parts = [p for p in parts if p]
name,salary,age = parts
if int(salary) >= 20000:
salary_above_20k += name + '\n'
else:
salary_below_20k += name + '\n'
QMessageBox.about(self.window,
'统计结果',
f'''薪资20000 以上的有:\n{salary_above_20k}
\n薪资20000 以下的有:\n{salary_below_20k}'''
)
案例:
app = QApplication([]) # (创建这个对象)提供整个图形界面程序的底层管理功能
starts=Stats() # 启动界面程序
starts.window.show() # 执行窗口程序的展示
app.exec_() # 进入该程序的事件处理循环,等待用户的输入
运行效果:
若运行时出现以下错误,可查看PySide2安装完无法使用的问题解决方案
在基本结构第二部分程序主体内容中,除了自行定义窗口属性外,可采用PySide2自带的designer开发图形界面更加方便,找到安装PySide2的路径:
可在designer里设计图形界面,案例如下:
设计完成后,保存.ui格式文件,并将该文件放置在项目开发文件下
程序主体内容中,对于程序执行内容几乎不变,对于窗口特性设定,可实例化从designer设计的.ui文件,如下所示:
class Stats:
# 设定窗口本身特性
def __init__(self):
# 从文件中加载UI定义
qfile_stats=QFile('UI/stats.ui')
qfile_stats.open(QFile.ReadOnly)
qfile_stats.close()
# 从UI定义中动态创建一个响应的窗口对象
# 注意:里面的空间对象也成为了窗口对象的属性了
# 比如 self.ui.button, self.ui.textEdit
self.ui=QUiLoader().load(qfile_stats)
self.ui.button.clicked.connect(self.handleCalc)
# 内置方法——程序执行内容
def handleCalc(self):
info = self.ui.textEdit.toPlainText()
# 薪资20000 以上 和 以下 的人员名单
salary_above_20k = ''
salary_below_20k = ''
for line in info.splitlines():
if not line.strip():
continue
parts = line.split(' ')
# 去掉列表中的空字符串内容
parts = [p for p in parts if p]
name,salary,age = parts
if int(salary) >= 20000:
salary_above_20k += name + '\n'
else:
salary_below_20k += name + '\n'
QMessageBox.about(self.ui,
'统计结果',
f'''薪资20000 以上的有:\n{salary_above_20k}
\n薪资20000 以下的有:\n{salary_below_20k}'''
)
导入的库做更新:
from PySide2.QtWidgets import QApplication,QMessageBox
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile
from PySide2.QtGui import QIcon # 导入加入图标库
后续执行程序启动也做相应更改:(加入了更改图标语句)
app = QApplication([]) # (创建这个对象)提供整个图形界面程序的底层管理功能
app.setWindowIcon(QIcon('1.png')) # 加载主窗口Icon
starts=Stats()
starts.ui.show() # 执行窗口程序的展示
app.exec_() # 进入该程序的事件处理循环,等待用户的输入
运行效果如下:
在使用Qt的pyside2库编写的图形界面程序,在导出exe时,建议以下操作步骤:
1. 更改cmd的执行路径到建立的python项目的路径下
2. 执行导出语句(包含有logo的打包)
pyinstaller demo1.py --noconsole --hidden-import PySide2.QtXml --icon="logo.ico"
3. 最后将涉及到的ui文件(使用designer设计的ui)和图形文件复制到dist的打包完成程序中
感谢 白月黑羽的Python教程