开发一个程序,让用户输入一段文本包含:员工姓名、薪资、年龄。该程序可以把薪资在 2万 以上、以下的人员名单分别打印出来。
利用python 程序开发上面界面
QApplication提供了整个图形界面程序的底层管理功能,初始化、程序入口参数的处理,用户事件(对界面的点击、输入、拖拽)分发给各个对应的控件,等等.
QMainWindow、QPlainTextEdit、QPushButton 是3个控件类,分别对应界面的主窗口、文本框、按钮,其都是控件基类对象QWidget的子类。
程序中
1. QMainWindow
实例化 QMainWindow 主窗口时,没有指定 父控件, QMainWindow 就是最上层的控件
window.resize(500, 400)
就决定了 主窗口的 宽度为500像素,高度为400像素。
window.move(300, 310)
就决定了 主窗口的 左上角坐标在 相对屏幕的左上角
的X横坐标300像素, Y纵坐标310像素这个位置。
window.setWindowTitle('薪资统计') 决定主窗口的名称
2. QPlainTextEdit
QPlainTextEdit、QPushButton 实例化时,都有一个参数window,其是指定它的父控件对象 是 window 对应的QMainWindow 主窗口
textEdit.setPlaceholderText("请输入薪资表") 其中setPlaceholderText是指输入提示语
move、resize 决定大小和位置
3. QPushButton
QPushButton('统计', window),其中 '统计'为按钮上的文字, QPushButton 实例化时,有一个参数window,表示父控件对象是 window 对应的QMainWindow 主窗口
4. window.show()
将放在主窗口的控件,全部显示在界面上
5. app.exec_()
进入QApplication的事件处理循环,接收用户的输入事件(),并且分配给相应的对象去处理
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit
# PySide2.QtWidgets 控件(widget) # 四个类
#QApplication 提供了整个图形界面程序的底层管理功能
# #初始化、程序入口参数的处理,用户事件(对界面的点击、输入、拖拽)分发给各个对应的控
app = QApplication([])
window = QMainWindow() #定义 创建主窗口对象 这时还没有创建窗口
window.resize(500, 400) #主窗口的 宽度为500像素,高度为400像素
window.move(300, 310) #主窗口的 左上角坐标在 相对屏幕的左上角 的X横坐标300像素, Y纵坐标310像素这个位置
window.setWindowTitle('薪资统计') #文本框的 左上角坐标在 相对父窗口的左上角 的X横坐标10像素, Y纵坐标25像素这个位置
textEdit = QPlainTextEdit(window) # 对象是 主窗口对象
textEdit.setPlaceholderText("请输入薪资表") #提示语
textEdit.move(10,25) #文本框的 左上角坐标在 相对父窗口的左上角 的X横坐标10像素, Y纵坐标25像素这个位置
textEdit.resize(300,350) #文本框的 宽度为300像素,高度为350像素
#
button = QPushButton('统计', window)
button.move(380,80)
window.show() #放在主窗口的控件,要能全部显示在界面上
app.exec_() #进入QApplication的事件处理循环,接收用户的输入事件(),并且分配给相应的对象去处理。
6. 运行程序,显示界面
7 . 点击 统计 按钮, 从界面控件 QPlainTextEdit 里面获取 用户输入的字符串内容,进行处理
用户点击了 统计 按钮,怎么通知程序? 因为只有程序被通知了这个点击,才能做出相应的处理。
(1)界面动作处理 (signal 和 slot)
在 Qt 系统中, 当界面上一个控件被操作时,比如 被点击、被输入文本、被鼠标拖拽等, 就会发出 信号
,英文叫 signal
预先在代码中指定 处理这个 signal 的函数,这个处理 signal 的函数 叫做 slot
(2)程序怎么处理?
指定 如果发生了button 按钮被点击 的事情,需要让 handleCalc
来处理
让 handleCalc 来 处理 button 被 点击的操作
button.clicked.connect(handleCalc)
(3)薪资在 2万 以上、以下的人员名单分别打印出来。
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit,QMessageBox
def handleCalc():
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)
window.move(300, 300)
window.setWindowTitle('薪资统计')
textEdit = QPlainTextEdit(window)
textEdit.setPlaceholderText("请输入薪资表")
textEdit.move(10,25)
textEdit.resize(300,350)
button = QPushButton('统计', window)
button.move(380,80)
button.clicked.connect(handleCalc)
window.show()
app.exec_()
这里 button.clicked.connect(handleCalc) 指 点击 button 按钮,让 handleCalc函数
来处理
8. 封装到类中
把一个窗口和其包含的控件,对应的代码全部封装到类中
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_()