QT学习笔记——第一个小栗子
本人学习例子基于如下教程
安装
按照教程介绍,PySide2/PySide6、PyQt5/PyQt6差距不算大,没太大区别,在开源和商用的区别。在已有的pyhon环境下直接安装
pip install pyside6 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyside2 -i https://pypi.douban.com/simple/
pip install pyqt6-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
第一个代码例子
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit,QMessageBox
class Stats():
def __init__(self):
self.window = QMainWindow() #创建主窗口
self.window.resize(500, 400)#决定大小
self.window.move(300, 300)#确定位置
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)#把 button 被 点击(clicked) 的信号(signal), 连接(connect)到了 handleCalc 这样的一个 slot上
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()# 底层管理功能
stats=Stats()
stats.window.show()
app.exec()#进入事件处理单元
1. 导入必要的模块
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit, QMessageBox
说明:
QApplication:用于管理应用程序的底层功能,例如事件循环、窗口管理等。QMainWindow:主窗口类,用于创建应用程序的主窗口。QPushButton:按钮控件,用于创建可点击的按钮。QPlainTextEdit:文本编辑框控件,用于输入和显示多行文本。QMessageBox:消息框控件,用于显示提示信息、警告或错误信息。
2. 定义 Stats 类
Stats 类是程序的核心,用于创建主窗口并实现薪资统计功能。
class Stats():
def __init__(self):
self.window = QMainWindow() # 创建主窗口
self.window.resize(500, 400) # 设置窗口大小为 500x400 像素
self.window.move(300, 300) # 将窗口移动到屏幕的 (300, 300) 位置
self.window.setWindowTitle('薪资统计') # 设置窗口标题为“薪资统计”
self.textEdit = QPlainTextEdit(self.window) # 创建文本编辑框,并设置父窗口为 self.window
self.textEdit.setPlaceholderText("请输入薪资表") # 设置文本编辑框的占位符文本
self.textEdit.move(10, 25) # 将文本编辑框移动到窗口的 (10, 25) 位置
self.textEdit.resize(300, 350) # 设置文本编辑框的大小为 300x350 像素
self.button = QPushButton('统计', self.window) # 创建一个按钮,并设置按钮文本为“统计”
self.button.move(380, 80) # 将按钮移动到窗口的 (380, 80) 位置
self.button.clicked.connect(self.handleCalc) # 将按钮的点击事件连接到 handleCalc 方法
说明:
- 在
__init__方法中,创建了一个QMainWindow作为主窗口,并设置了窗口的大小和标题。 - 创建了一个
QPlainTextEdit控件,用于输入薪资信息,并设置了占位符文本。 - 创建了一个
QPushButton按钮,点击时触发薪资统计功能,并通过信号与槽机制连接到handleCalc方法。
3. 实现薪资统计逻辑
handleCalc 方法是薪资统计的核心逻辑。
def handleCalc(self):
info = self.textEdit.toPlainText() # 获取文本编辑框中的所有文本
salary_above_20k = '' # 用于存储薪资20000以上人员的名单
salary_below_20k = '' # 用于存储薪资20000以下人员的名单
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: # 判断薪资是否大于或等于20000
salary_above_20k += name + '\n' # 如果是,则将姓名添加到薪资20000以上名单
else:
salary_below_20k += name + '\n' # 否则,将姓名添加到薪资20000以下名单
QMessageBox.about(self.window, # 弹出消息框显示统计结果
'统计结果',
f'''薪资20000 以上的有:\n{salary_above_20k}
\n薪资20000 以下的有:\n{salary_below_20k}'''
)
说明:
info.splitlines():将输入的多行文本按行拆分成列表。line.split(' '):将每一行按空格分割为多个部分。parts = [p for p in parts if p]:去掉分割后的空字符串部分,确保每个字段都有效。int(salary):将薪资字符串转换为整数,进行比较。- 使用字符串拼接将薪资高于或低于 20000 的人员姓名分别存储到
salary_above_20k和salary_below_20k中。 QMessageBox.about():显示弹出框,展示统计结果。
4. 主程序入口
app = QApplication() # 创建 QApplication 实例,用于管理应用程序
stats = Stats() # 创建 Stats 类的实例
stats.window.show() # 显示主窗口
app.exec() # 启动应用程序的事件处理循环
说明:
QApplication():创建应用程序实例,启动事件循环。stats = Stats():创建Stats类实例,初始化并显示主窗口。app.exec():进入事件循环,等待并响应用户的操作。
代码学习要点
1. PySide6 的基本组件
QApplication:应用程序的入口,负责管理全局资源。QMainWindow:主窗口,可以包含菜单栏、工具栏、状态栏等。QPlainTextEdit:用于输入和显示多行文本,适合处理简单的文本数据。QPushButton:按钮控件,用于触发事件。QMessageBox:用于显示提示信息,支持多种类型(如警告、信息、错误等)。
2. 信号与槽机制
self.button.clicked.connect(self.handleCalc):将按钮的点击事件(信号)连接到handleCalc方法(槽)。当按钮被点击时,handleCalc方法会被调用。
3. 文本处理
self.textEdit.toPlainText():获取文本编辑框中的所有文本。info.splitlines():将文本按行分割为一个列表。line.split(' '):将每行按空格分割为多个部分。int(salary):将字符串类型的薪资转换为整数。
4. 字符串拼接
- 使用
+=操作符将名字逐行拼接到字符串中。虽然这种方法简单,但不推荐用于大量数据的拼接,因为性能较差。可以使用str.join方法优化。
5. 消息框的使用
QMessageBox.about():显示一个消息框,包含标题和内容。适合用于显示提示信息。
整体上难度不大,冲冲冲,就是简单的Python语言。


被折叠的 条评论
为什么被折叠?



