基于python写一个小的窗口
import sys
# 必须使用两个类:QApplication和QWidget。都在PyQt5.QtWidgets。
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == "__main__":
# 创建 QApplication 的实例
app = QApplication(sys.argv)
# 创建一个窗口
win = QWidget()
# 设置窗口的大小
win.resize(450, 450)
# 设置窗口在屏幕的坐标
win.move(500, 500)
# 设置窗口的标题
win.setWindowTitle("我的第一个桌面应用")
# 显示窗口
win.show()
# 进入程序的主循环, 并通过exit()函数确保主循环安全结束
sys.exit(app.exec_())
图片:
让用户输入一段文本包含:员工姓名、薪资、年龄。 该程序可以把薪资在 2万 以上、以下的人员名单分别打印出来。 当用户点击 统计 按钮时, 从界面控件 QPlainTextEdit 里面获取 用户输入的字符串内容,进行处理。
# 让用户输入一段文本包含:员工姓名、薪资、年龄。
# 该程序可以把薪资在 2万 以上、以下的人员名单分别打印出来。
# 当用户点击 统计 按钮时, 从界面控件 QPlainTextEdit 里面获取 用户输入的字符串内容,进行处理。
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, 310)
# 标题
self.window.setWindowTitle("薪资统计")
# 窗口里文本编辑的部分 基于窗口
self.textEidt = QPlainTextEdit(self.window)
# 用户没输入数据时显示, 输入数据后覆盖
self.textEidt.setPlaceholderText("请输入薪资表")
self.textEidt.move(10, 25)
self.textEidt.resize(300, 350)
# 按键统计部分
self.button = QPushButton("统计", self.window)
self.button.move(380, 80) # 该坐标基于 window控件
# 将按键与程序连接起来 如果该键被按下 执行handleCalc函数
self.button.clicked.connect(self.handleCalc)
def handleCalc(self):
info = self.textEidt.toPlainText() # 接收数据
# 名单
hsalary = '' # 高于2万
lsalary = '' # 低于2万
# 以换行符作为分隔符来分割字符串,并返回数组
for item in info.splitlines(): # 以换行符分割字符串
# 去除首位空格
if not item.strip(): # strip() 函数移除字符串头尾指定的字符(默认为空格或换行符)或字符序列 str.strip( '0' ); # 去除首尾字符 0
continue # 该方法只能删除开头或是结尾的字符,不能删除中间部分的字符
# split() :通过指定分隔符对字符串进行分割,并返回数组。默认情况下,分隔符为空格
parts = item.split(' ') # 以空格为界 分割 去掉列表中空格
parts = [i for i in parts if i] # 列表推导式 parts非空字符
name, salary, age = parts
if int(salary) >= 20000:
hsalary += name + '\n'
else:
lsalary += name + '\n'
# 弹出对话框
QMessageBox.about(self.window,
'统计结果',
f'''薪资20000 以上的有:\n{hsalary}
\n薪资20000 以下的有:\n{lsalary}'''
)
# QApplication 提供了整个图形界面程序的底层管理功能 必须在任何界面控件对象创建前
app = QApplication([])
stats = Stats()
stats.window.show()
# 进入QApplication的事件处理循环,接收用户的输入事件(),并且分配给相应的对象去处理。
app.exec_()
简单介绍: 第一个用PyQt5写的,第二个用Pyside2 这两个都差不多,第二个是18年官方才推出来的 QApplication 提供了整个图形界面程序的底层管理功能,比如: 初始化、程序入口参数的处理,用户事件(对界面的点击、输入、拖拽)分发给各个对应的控件,我们必须在任何界面控件对象创建前,先创建它。 QMainWindow、QPlainTextEdit、QPushButton ,QMainWindow是4个控件类,分别对应界面的主窗口、文本框、按钮,弹窗他们都是控件基类对象QWidget的子类。 要在界面上 创建一个控件 ,就需要在程序代码中 创建 这个 控件对应类 的一个 实例对象 在 Qt 系统中,控件(widget)是 层层嵌套 的,除了最顶层的控件,其他的控件都有父控件。QPlainTextEdit、QPushButton 实例化时,都有一个参数window(主窗口实例化对象,父控件对象)
# 创建窗口
self.window = QMainWindow()
# 窗口里文本编辑的部分 基于窗口
self.textEidt = QPlainTextEdit(self.window)
# 按键统计部分
self.button = QPushButton("统计", self.window)
界面动作处理 (signal 和 slot) 当用户点击 统计 按钮时, 从界面控件 QPlainTextEdit 里面获取 用户输入的字符串内容,进行处理。首先第一个问题: 用户点击了 统计 按钮,怎么通知程序? 因为只有程序被通知了这个点击,才能做出相应的处理。
在 Qt 系统中, 当界面上一个控件被操作时,比如 被点击、被输入文本、被鼠标拖拽等, 就会发出 信号 ,英文叫 signal 。就是表明一个事件(比如被点击、被输入文本)发生了。 我们可以预先在代码中指定 处理这个 signal 的函数,这个处理 signal 的函数 叫做 slot 。 比如,我们可以像下面这样定义一个函数
def handleCalc():
print('统计按钮被点击了')
如果 发生了button 按钮被点击 的事情,需要让 handleCalc 来处理
# 将按键与程序连接起来 如果该键被按下 执行handleCalc函数
self.button.clicked.connect(self.handleCalc)
把 button 被 点击(clicked) 的信号(signal), 连接(connect)到了 handleCalc 这样的一个 slot上,大白话就是:让 handleCalc 来 处理 button 被 点击的操作。