此博客只为记录学习PyQT5过程中的一些学习笔记,学习资源使用的是如下视频:
一个简单的例子_哔哩哔哩_bilibili
代码和相关学习的知识点都是参考上述视频
接下来我们要开发我们的第一个python GUI,统计如下人员工资在2W以上和2W以下的人员的总数
可以自行制作,也可以直接复制:
薛蟠 4560 25
薛蝌 4460 25
薛宝钗 35776 23
薛宝琴 14346 18
王夫人 43360 45
王熙凤 24460 25
王子腾 55660 45
王仁 15034 65
尤二姐 5324 24
贾芹 5663 25
贾兰 13443 35
贾芸 4522 25
尤三姐 5905 22
贾珍 54603 35
当然,如何修改handleCalc这个函数里面修改即可,这里只讲述GUI的制作方法,具体数据提取过程不讲述
代码GUI设置部分注释很详细,有问题可以在评论中指出
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit, QMessageBox # 导入相应的库,应用程序,主窗口,按钮,纯文本的编辑框,信息窗口
def handleCalc():
print('统计按钮被点击了')
info = 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(window,
'统计结果',
f'''薪资20000 以上的有:\n{salary_above_20k}
\n薪资20000 以下的有:\n{salary_below_20k}'''
)
app = QApplication([]) #创建一个底层管理程序,传入空的(默认)
window = QMainWindow()#申请主窗口对象
window.resize(500, 400) #定义主窗口外观大小 , 500像素宽度,400像素宽度
window.move(300, 310) #程序窗口左上角在显示器的位置,可以理解成你的gui出现在屏幕的位置(坐标)
window.setWindowTitle('薪资统计') #设置窗口标题栏
textEdit = QPlainTextEdit(window) #创建一个纯文本控件,传入第一个界面作为主控件
textEdit.setPlaceholderText("请输入薪资表")#提示文本
textEdit.move(10,25) #标题相对于第一个主控件的位置坐标 (10像素 , 25像素)
textEdit.resize(300,350)# 定于窗口大小
button = QPushButton('统计', window) #定于统计按钮
button.move(380,80)#相对于第一个 windows主控件的位置
button.clicked.connect(handleCalc)
window.show() #显示窗口
app.exec_() #循环显示界面,等待用户指令
点击run,运行程序
从我的博客上复制数据,进行数据输入,也可以自己制作自己的数据
鼠标点击统计
输入结果
考虑到我们写GUI的过程中一个窗口的内容,就使用了大量的全局变量。这样对于我们对自己的GUI进行复杂功能拓展的时候,会导致需要设置较多的全局变量,从而导致我们的代码变的非常乱,和复杂。因此我们需要将一个或者一类的功能封装成一个对象。
代码跟上部分未封装的部分一模一样,只是封装成对象方便调用和管理,不懂的地方可以看上部分代码的注释, 代码实现的功能与上部分代码一样。
from PySide2.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)
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_()