您当前的位置: 首页 >  qt

风间琉璃•

暂无认证

  • 3浏览

    0关注

    337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

PyQt5案例(1)

风间琉璃• 发布时间:2021-08-12 18:54:38 ,浏览量:3

基于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 被 点击的操作。

关注
打赏
1665385461
查看更多评论
立即登录/注册

微信扫码登录

0.0380s