2 Qt 一个案例

开发一个程序,让用户输入一段文本包含:员工姓名、薪资、年龄。该程序可以把薪资在 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_()

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值