Python学习笔记-PyQt6消息窗

news2024/11/18 17:26:14

对话框是界面编程中重要的窗体,一般用于提示或者一些其他特定操作。

一、使用QDialog显示通用消息框

直接使用QDialog类,可以及通过对话框进行通用对话框显示,亦可以通过自定义设置自己需要的对话框。

# _*_ coding:utf-8 _*_

import sys

from PyQt6.QtWidgets import QWidget
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWidgets import QVBoxLayout
from PyQt6.QtWidgets import QHBoxLayout
from PyQt6.QtWidgets import QPushButton
from PyQt6.QtWidgets import QDialog
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import Qt


class MainWindowView(QMainWindow):
    """主窗体界面"""

    def __init__(self):
        """构造函数"""
        super().__init__()

        self.setWindowTitle("MainWindow")
        self.setWindowIcon(QIcon(r"./res/folder_pictures.ico"))
        self.resize(300, 200)
        self.setMinimumSize(600, 400)


        self.center()
        self.initui()

        

    def initui(self):
        """初始函数"""

        self.vboxlayout = QVBoxLayout(self)
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.vboxlayout)
        self.setCentralWidget(self.main_widget)

        self.hboxlayout = QHBoxLayout(self)
        self.btn = QPushButton(self)
        self.btn.setText("弹出对话框")
        self.btn.move(100,100)
        self.btn.clicked.connect(self.show_dialog)

    def center(self):
        """居中显示"""
        win_rect = self.frameGeometry()  # 获取窗口矩形
        screen_center = self.screen().availableGeometry().center()  # 屏幕中心
        win_rect.moveCenter(screen_center)      # 移动窗口矩形到屏幕中心
        self.move(win_rect.center())         # 移动窗口与窗口矩形重合

    def show_dialog(self):
        dialog = QDialog()
        button = QPushButton("确定", dialog)
        button.clicked.connect(dialog.close)
        button.move(50,50)
        dialog.setWindowTitle("QDialog")
        dialog.setWindowModality(Qt.WindowModality.ApplicationModal)
        dialog.exec()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    view = MainWindowView()
    view.show()
    sys.exit(app.exec())

结果:

点击按钮可以弹出对话框,可以添加对应的按钮关联信号进行窗体关闭或控制。

二、使用QMessageBox显示不同的对话框

QMessageBox是通用的消息对话框,包括如下多种形式,不同的对话框有不同的图标和按钮,还可以根据自己需要微调样式。

# _*_ coding:utf-8 _*_

import sys

from PyQt6.QtWidgets import QWidget
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWidgets import QVBoxLayout
from PyQt6.QtWidgets import QPushButton
from PyQt6.QtWidgets import QMessageBox
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import Qt


class DemoQMessageBox(QMainWindow):
    """主窗体界面"""

    def __init__(self):
        """构造函数"""
        super().__init__()

        self.setWindowTitle("MainWindow")
        self.setWindowIcon(QIcon(r"./res/20 (3).ico"))
        self.resize(300, 200)
        self.setMinimumSize(600, 400)

        self.center()
        self.initui()

    def initui(self):
        """初始函数"""

        self.vboxlayout = QVBoxLayout(self)
        self.vboxlayout.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.vboxlayout)
        self.setCentralWidget(self.main_widget)

        btns = ["关于对话框", "错误对话框", "警告对话框", "提问对话框", "消息对话框",]

        for btnname in btns:
            """添加button"""
            btn = QPushButton(btnname)
            self.vboxlayout.addWidget(btn)
            btn.clicked.connect(self.show_dialog)

    def center(self):
        """居中显示"""
        win_rect = self.frameGeometry()  # 获取窗口矩形
        screen_center = self.screen().availableGeometry().center()  # 屏幕中心
        win_rect.moveCenter(screen_center)      # 移动窗口矩形到屏幕中心
        self.move(win_rect.center())         # 移动窗口与窗口矩形重合

    def show_dialog(self):
        if type(self.sender()) is QPushButton:
            btn_text = self.sender().text()
            if btn_text == "关于对话框":
                QMessageBox.about(self, "关于", "这是关与对话框")
            elif btn_text == "错误对话框":
                QMessageBox.critical(self,"错误","程序发生了错误!",QMessageBox.StandardButton.Ignore | QMessageBox.StandardButton.Abort | QMessageBox.StandardButton.Retry,QMessageBox.StandardButton.Retry)
            elif btn_text == "警告对话框":
                QMessageBox.warning(
                    self, "警告", "余量不足。", QMessageBox.StandardButton.Ok, QMessageBox.StandardButton.Ok)
            elif btn_text == "提问对话框":
                QMessageBox.question(self, "提问", "是否取消" ,QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,QMessageBox.StandardButton.Yes)
            elif btn_text == "消息对话框":
                QMessageBox.information(
                    self, "消息", "这是通知消息", QMessageBox.StandardButton.Ok, QMessageBox.StandardButton.Ok)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    view = DemoQMessageBox()
    view.show()
    sys.exit(app.exec())

结果:

点击不同按钮,显示不同的消息窗口:

关于对话框:

错误对话框:

警告对话框:

提问对话框:

消息对话框:

三、输入信息窗

输入对话框,用于弹窗获取用户的输入信息,包含输入列表,输入文本,输入数字等方式。

  • QInputDialog.getItem(self,"获取选项消息框", "名字列表", items)

  • QInputDialog.getText(self,"获取文本消息框", "请输入文本信息:")

  • QInputDialog.getInt(self,"获取整数消息框", "请输入整数:")

示例:

# _*_ coding:utf-8 _*_

import sys
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QWidget
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWidgets import QFormLayout
from PyQt6.QtWidgets import QPushButton
from PyQt6.QtWidgets import QLineEdit
from PyQt6.QtWidgets import QInputDialog
from PyQt6.QtGui import QColor
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import Qt


class QInputDialogDemoView(QMainWindow):
    """输入消息框类"""

    def __init__(self):
        """构造函数"""

        super().__init__()
        self.setWindowTitle("MainWindow")
        self.setWindowIcon(QIcon(r"./res/20 (3).ico"))
        self.resize(200, 100)
        self.center()
        self.initui()

    def center(self):
        """居中显示"""
        win_rect = self.frameGeometry()  # 获取窗口矩形
        screen_center = self.screen().availableGeometry().center()  # 屏幕中心
        # 移动窗口矩形到屏幕中心
        win_rect.moveCenter(screen_center)
        # 移动窗口与窗口矩形重合
        self.move(win_rect.center())

    def initui(self):
        """初始函数"""

        # 创建表单布局作为底层布局
        self.formlayout = QFormLayout(self)
        self.formlayout.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.formlayout)
        self.setCentralWidget(self.main_widget)

        # 添加获取选项按钮
        self.btn_getitem = QPushButton("Get Item")
        self.btn_getitem.clicked.connect(self.get_item)
        self.ledit_getitem = QLineEdit()
        self.formlayout.addRow(self.btn_getitem, self.ledit_getitem)

        # 添加获取文本按钮
        self.btn_gettext = QPushButton("Get Text")
        self.btn_gettext.clicked.connect(self.get_text)
        self.ledit_gettext = QLineEdit()
        self.formlayout.addRow(self.btn_gettext, self.ledit_gettext)

        # 添加获取整数按钮
        self.btn_getint = QPushButton("Get Int")
        self.btn_getint.clicked.connect(self.get_int)
        self.ledit_getint = QLineEdit()
        self.formlayout.addRow(self.btn_getint, self.ledit_getint)

    def get_item(self):
        """获取选项槽"""
        items = ("小张", "小明", "小李", "小朱")
        item,result = QInputDialog.getItem(self,"获取选项消息框", "名字列表", items)
        print(f"item : {item}, ok : {result}, tpye : {type(result)}")
        if item and result:
            self.ledit_getitem.setText(item)

    def get_text(self):
        """获取文本槽"""
        text,result = QInputDialog.getText(self,"获取文本消息框", "请输入文本信息:")
        print(f"item : {text}, ok : {result}, tpye : {type(result)}")
        if text and result:
            self.ledit_gettext.setText(text)


    def get_int(self):
        """获取文本槽"""
        num,result = QInputDialog.getInt(self,"获取整数消息框", "请输入整数:")
        print(f"item : {num}, ok : {result}, tpye : {type(result)}")
        if num and result:
            self.ledit_getint.setText(str(num))



if __name__ == "__main__":
    """主程序运行"""
    app = QApplication(sys.argv)
    window = QInputDialogDemoView()
    window.show()
    sys.exit(app.exec())

结果:

主界面:

输入选项:

输入文本:

输入整数:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/163705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL主从复制的原理是什么?

主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。 MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主…

Python批量下载某网站贵得要shi文档 并保存为PDF

人生苦短,我用Python 基本开发环境💨 Python 3.6Pycharm 相关模块的使用💨 import requests import parsel import re import os import pdfkit需要使用到一个软件 wkhtmltopdf 这个软件的作用就是把html文件转成PDF 想要把文档内容保存…

人工智能轨道交通行业周刊-第30期(2023.1.9-1.15)

本期关键词:贵阳智慧车站、城轨智能化汇总、隧道巡检、信创厂商、手语数字人 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与…

煤矿人员工服着装智能识别监测系统 yolov5架构

煤矿人员工服着装智能识别监测系统通过pythonyolov5深度学习网络架构,对画面中人员是否正确着装实时分析,发现违规着装立即抓拍存档告警。我们选择当下YOLO最新的卷积神经网络YOLOv5来进行识别检测。按照官方给出的数目,现版本的YOLOv5每个图…

数据库概述杂谈之章节回顾

数据与数据之间联系的模型表示 网状模型用“图”结构来表示数据及数据之间的联系层次模型用“树”结构来表示数据及数据之间的联系关系模型用“关系(二维表)”结构来表示数据及数据之间的联系对象模型用“对象”数据结构来表示数据及数据之间的联系 数…

SPI协议与GPIO模拟SPI的实现

SPI定义 SPI(Serial Peripheral Interface, 串口外设接口),它用于MCU与各种外围设备以串行方式进行通信,速度最高可达25MHz以上。 SPI接口主要应用在EEPROM、 FLASH、实时时钟、网络控制器、 OLED显示驱动器、 AD转换器&#xf…

ArcGIS10.6保姆式安装教程,超详细;附安装包

安装前请关闭杀毒软件,系统防火墙,断开网络连接 参考链接:请点击 下载链接: 通过百度网盘分享的文件:ArcGIS10.6zip 链接:https://pan.baidu.com/s/1tCsOQ_-WP-usEHmJo9SfcA 提取码:hn15 复制这段内容打开「百度网盘A…

Java环境安装、python环境安装、Burpsuite安装

数据来源 Java环境安装 Windows安装JDK8(安装过程:一路下一步) 下载JDK8:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html 百度网盘:windows64、84位 配置PATH环境变量: 变量名…

RT-Thread系列--双链表分析

一、目的学习过C语言的同学应该都知道几种常用的数据结构,例如数组、单链表、双链表等。每种数据结构都有其特点和应用场景,本篇就结合RT-Thread源码分析一下其双链表实现细节和特点。那什么是双链表呢,这边简单解释一下帮助大家理解。通过双…

KubeSphere 开源社区 2022 年度回顾与致谢

2022 年,国内的云原生技术生态日趋完善,细分技术项目也不断涌现,形成了完整的支撑应用云原生化的全生命周期技术体系。基础设施即代码、微服务、Serverless 等技术,促使基础设施资源向更加灵活弹性、自动化方向发展。而开源生态也…

重装系统如何设置u盘启动为第一启动项

如何设置u盘启动为第一启动项呢?将U盘设为第一启动项,是使用U盘装机工具重装系统的重要步骤之一,很多网友不清楚怎么操作,下面小编就分享下设置u盘启动为第一启动项的方法。 工具/原料: 系统版本:win7家庭版 品牌型…

【openGauss实战4】数据类型解读

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验 一位上进心十足的【大数据领域博主】!😜&#x1f61…

一文教会你巧用设计模式重构项目

文章目录一、设计模式总览二、模板方法模式案例三、策略模式案例四、支付改造4.1 思路分析4.2 实现图解:4.3 代码实现:4.4 效果演示4.5 如何扩展本文参考自12.29日尚硅谷雷神的 巧妙使用设计模式重构项目 一、设计模式总览 总体分类 不同时期选择不同的…

Python批量检索论文被引用数量源码,利用百度学术网页版来批量检索论文的被引用数量源码

论文被引用数搜索 利用百度学术网页版来检索一个文件夹中的所有论文的被引用数量。 完整代码下载地址:Python批量检索论文被引用数量源码 依赖有beautifulsoup库、regex正则表达式库。 使用方法 主程序为fileWalk.py。 修改程序中workPath值为文件夹绝对路径&am…

基于碰撞传感器的自动导航车系统设计

1、内容简介略635-可以交流、咨询、答疑2、内容说明略随着世界各国对科学技术的重视,各类高科技技术突飞猛进,人类逐步进入人工智能时代。而在这些高科技技术的背后,自动导航小车作为无人驾驶小车的一种类型备受关注。它的主要优点是不需要人…

冰冰学习笔记:智能指针

欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正。 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位…

vite 在proxy代理中更改headers

vite 在proxy代理中更改headers 平时我们在对接接口时,我们都是配置代理解决跨域问题 proxy: {^/api: {target: envConfig.VITE_APP_BASE_URL,changeOrigin: true,rewrite: (path) > path.replace(/^/api/, ),}} 某天你明明配置好了代理,浏览器还是会…

嵌入式Linux-守护进程

1.守护进程 1.1 何为守护进程 守护进程(Daemon)也称为精灵进程,是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些事情的发生,主要表现为以下两个特点: 长期运行。 守…

Java中的多线程安全问题

目录 一、什么是线程安全? 二、线程不安全的原因 2.1 从底层剖析count的操作 2.2 线程不安全的原因总结 2.3 JVM内存模型(JMM) 三、synchronized 关键字-监视器锁monitor lock 3.1 如何加锁(Synchronized用法和特性&#xff…

【sklearn】模型融合_堆叠法

Stacking参数含义1. 工具库 & 数据2. 定义交叉验证函数2.1 对融合模型2.2 对单个评估器3. 定义个体学习器和元学习器3.1 个体学习器3.2 元学习器4. 评估调整模型5. 元学习器的特征矩阵5.1 特征矩阵两个问题 & Stacking5.2 StackingClassfier\Regressor参数cv - 解决样本…