【PyQt】13-对话框

文章目录

  • 前言
  • 一、知识储备
  • 二、详细展开
    • 2.1 通用对话框-QDialog
    • 2.1 消息类型对话框-QMessageBox
      • 运行结果
    • 2.2 输入对话框 QInputDilog
      • 运行结果
    • 2.3 字体对话框-QFontDialog
      • 运行结果
    • 2.4 颜色对话框
      • 运行结果
    • 2.5 文件对话框
      • 运行结果
  • 总结


前言

1、四种形式的对话框。
2、警告框的制作。
3、修改字体框。
4、学会查看函数的返回值。


一、知识储备

对话框的基类是QDialog

  • QMessageBox
    可以用来显示各种类型的消息框,包括提示、警告、错误和提问等。可以包含文本信息、按钮和图标,用于与用户进行交互。

  • QColorDialog用于选择颜色的对话框,可以让用户选择颜色并返回所选颜色的数值。

  • QFileDialog 用于显示文件选择对话框或目录选择对话框,用于让用户选择文件或目录。

  • QFontDialog用于选择字体的对话框,可以让用户选择字体样式、大小和颜色等属性。

  • QInputDialog提供了多种标准的对话框,用于获取不同类型的用户输入,如文本、整数、浮点数等。

二、详细展开

2.1 通用对话框-QDialog

'''
#Author :susocool
#Creattime:2024/2/15
#FileName:30-通用对话框
#Description: '''
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *class QDialogDemo(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('通用对话框')self.resize(300,200)self.button = QPushButton(self)self.button.setText('弹出对话框')self.button.clicked.connect(self.showDialog)def showDialog(self):dialog = QDialog()button = QPushButton('确定',dialog)button.clicked.connect(dialog.close)button.move(50,50)dialog.setWindowTitle('对话框')dialog.setWindowModality(Qt.ApplicationModal)dialog.exec()if __name__ == '__main__':app = QApplication(sys.argv)ui = QDialogDemo()ui.show()sys.exit(app.exec_())

运行结果
加粗样式

2.1 消息类型对话框-QMessageBox

1.关于对话框
2.错误对话框
3.警告对话框
4.提问对话框
5.消息对话框

'''
#Author :susocool
#Creattime:2024/2/15
#FileName:31-消息类型
#Description: 展示5种消息类型
'''
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *class MessaageBoxDemo(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('消息类型展示')self.resize(300,250)self.button_show = QPushButton()self.button_show.setText('显示对话框')self.button_showMessage = QPushButton('显示消息')self.button_showWarnning = QPushButton('显示警告')self.button_showError = QPushButton('显示错误')self.button_showAsk = QPushButton('显示提问')self.button_show.clicked.connect(self.showDialog)self.button_showMessage.clicked.connect(self.showDialog)self.button_showError.clicked.connect(self.showDialog)self.button_showWarnning.clicked.connect(self.showDialog)self.button_showAsk.clicked.connect(self.showDialog)layout = QVBoxLayout()layout.addWidget(self.button_show)layout.addWidget(self.button_showMessage)layout.addWidget(self.button_showError)layout.addWidget(self.button_showWarnning)layout.addWidget(self.button_showAsk)self.setLayout(layout)def showDialog(self):text = self.sender().text()if text == '显示对话框':QMessageBox.about(self,'关于','这是一个关于对话框')elif text == '显示消息':reply = QMessageBox.information(self,'消息','这是一个显示消息对话框',QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes)# print(reply)elif text == '显示警告':# 注意是小写的wQMessageBox.warning(self,'警告','这是一个警告对话框',QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes)elif text == '显示错误':QMessageBox.critical(self,'错误','这是一个错误对话框',QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes)elif text == '显示提问':QMessageBox.question(self,'提问','这是一个提问对话框',QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes)if __name__ == '__main__':app = QApplication(sys.argv)ui = MessaageBoxDemo()ui.show()sys.exit(app.exec_())

运行结果

关于
在这里插入图片描述
消息
在这里插入图片描述
错误
在这里插入图片描述
警告
在这里插入图片描述
提问
在这里插入图片描述

2.2 输入对话框 QInputDilog

  • QInputDilog.getItem
  • QInputDialog.getText
  • QInputDialog.getInt
'''
#Author :susocool
#Creattime:2024/2/15
#FileName:32-输入对话框
#Description: '''
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *class MessaageBoxDemo(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('输入对话框')self.button_1 = QPushButton('获取列表中的选项')self.lineEdit_1 = QLineEdit()self.button_2 = QPushButton('获取字符串')self.lineEdit_2 = QLineEdit()self.button_3 = QPushButton('获取整数')self.lineEdit_3 = QLineEdit()self.button_1.clicked.connect(self.getItem)self.button_2.clicked.connect(self.getText)self.button_3.clicked.connect(self.getInt)layout = QFormLayout()layout.addRow(self.button_1,self.lineEdit_1)layout.addRow(self.button_2,self.lineEdit_2)layout.addRow(self.button_3,self.lineEdit_3)self.setLayout(layout)def getItem(self):items = ('C','C++','Python','Java')item,ok = QInputDialog.getItem(self,'请选择编程语言','语言列表',items)if ok and items:self.lineEdit_1.setText(item)def getText(self):text,ok = QInputDialog.getText(self,'文本输入框','输入姓名')if ok and text:self.lineEdit_2.setText(text)def getInt(self):num,ok = QInputDialog.getText(self,'整数输入框','输入数字')if ok and num:self.lineEdit_3.setText(str(num))if __name__ == '__main__':app = QApplication(sys.argv)ui = MessaageBoxDemo()ui.show()sys.exit(app.exec_())

运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 字体对话框-QFontDialog

'''
#Author :susocool
#Creattime:2024/2/16
#FileName:33-字体对话框
#Description:修改字体
'''
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *class QFontDialogDemo(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('字体对话框')self.button_font = QPushButton('选择字体')self.label_font = QLabel('未经反思的人生是不值得过的,未经记录的技术是不负责任的')self.button_font.clicked.connect(self.getFont)layout = QVBoxLayout()layout.addWidget(self.button_font)layout.addWidget(self.label_font)self.setLayout(layout)def getFont(self):font,ok = QFontDialog.getFont()if ok :self.label_font.setFont(font)if __name__ == '__main__':app = QApplication(sys.argv)ui = QFontDialogDemo()ui.show()sys.exit(app.exec_())

在这里插入图片描述
关于,为什么要设置两个参数去接收。

    def getFont(self, *__args): # real signature unknown; restored from __doc__ with multiple overloads"""getFont(initial: QFont, parent: Optional[QWidget] = None, caption: Optional[str] = '', options: Union[QFontDialog.FontDialogOptions, QFontDialog.FontDialogOption] = QFontDialog.FontDialogOptions()) -> (QFont, Optional[bool])getFont(parent: Optional[QWidget] = None) -> (QFont, Optional[bool])"""pass
  • 第一个重载的签名为 getFont(initial: QFont, parent: Optional[QWidget] = None, caption: Optional[str] = ‘’, options: Union[QFontDialog.FontDialogOptions, QFontDialog.FontDialogOption] = QFontDialog.FontDialogOptions()) -> (QFont, Optional[bool])
  • 第二个重载的签名为 getFont(parent: Optional[QWidget] = None) -> (QFont, Optional[bool])

这两个方法都返回一个元组,元组的第一个元素是 QFont 对象,第二个元素是一个可选的布尔值。

简单说,就是因为QFontDialog.getFont()的返回值时两个,所以就要设置两个变量来接收。

运行结果

在这里插入图片描述
在这里插入图片描述

2.4 颜色对话框

'''
#Author :susocool
#Creattime:2024/2/16
#FileName:34-颜色对话框
#Description: '''
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *class QColorDialogDemo(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('颜色调节')self.button_color = QPushButton( '选择字体颜色' )self.label_color = QLabel( '未经反思的人生是不值得过的,未经记录的技术是不负责任的' )self.button_color.clicked.connect( self.getColor )layout = QVBoxLayout()layout.addWidget( self.button_color )layout.addWidget( self.label_color )self.setLayout(layout)def getColor(self):color = QColorDialog.getColor()p = QPalette()p.setColor(QPalette.windowText,color)self.label_color.setPalette(p)if __name__ == '__main__':app = QApplication(sys.argv)ui = QColorDialogDemo()ui.show()sys.exit(app.exec_())

查看返回值
在这里插入图片描述

运行结果

在这里插入图片描述
但是选择完字体之后会异常退出。目前尚未查明原因QAQ
在这里插入图片描述

背景色
在这里插入图片描述

2.5 文件对话框

打开,保存文件

'''
#Author :susocool
#Creattime:2024/2/16
#FileName:35-文件对话框
#Description: 打开、保存文件
'''import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *class QFileDialogDemo(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('文件操作')self.button_img = QPushButton( '加载图片' )self.label_showimg = QLabel()self.button_file = QPushButton('加载文件')self.contents = QTextEdit()self.button_img.clicked.connect(self.loadimg)self.button_file.clicked.connect(self.loadfile)layout = QVBoxLayout()layout.addWidget(self.button_img)layout.addWidget(self.label_showimg)layout.addWidget(self.button_file)layout.addWidget(self.contents)self.setLayout(layout)def loadimg(self):fname,_ = QFileDialog.getOpenFileName(self,'打开文件','.','图像文件(*.jpg *,png)')self.label_showimg.setPixmap(QPixmap(fname))def loadfile(self) :dialog = QFileDialog ()dialog.setFileMode ( QFileDialog.AnyFile )  # 选择任意类型的文件dialog.setFilter ( QDir.Files ) # 设置对话框的过滤器,限制用户只能选择文件,而不是目录if dialog.exec () :filenames = dialog.selectedFiles ()# f = open ( filenames[0], 'r' )      # 可以打开多个,只展示第一个f = open ( filenames[0],encoding='utf-8', mode='r' )      # 对编码进行限制之后可以显示的类型更多with f :date = f.read ()self.contents.setText ( date )  # 显示文件内容到 self.contents 控件上
""" 
# 将函数设置为空def loadfile(self):pass"""if __name__ == '__main__':app = QApplication(sys.argv)ui = QFileDialogDemo()ui.show()sys.exit(app.exec_())

运行结果

在这里插入图片描述
在这里插入图片描述


总结

这篇文章依旧没有总结

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

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

相关文章

深入理解 Vue3 中的 setup 函数

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

搞不明白这4类车,别去自驾游

文 | AUTO芯球 作者 | 太2 春天要来了 又可以去浪了 喜欢自驾的朋友憋不住了吧, 鄙人不才全国各地走过,各种车型也大致开过。 那么根据我这几年的自驾经历 来跟大家聊一聊我觉得比较方便好用的自驾车。 第一类,城市SUV 宝马X&#xff…

vue框架-vue-cli

vue-cli Vue CLI是一个官方的脚手架工具,用于快速搭建基于Vue.js的项目。Vue CLI提供了一整套可配置的脚手架,可以帮助开发人员快速构建现代化的Web应用程序。 Vue CLI通过提供预先配置好的Webpack模板和插件,使得开发人员可以在不需要手动编写Webpack配置的情况下快速创建…

【Docker】docker安装

需要云服务器等云产品来学习Linux可以移步/-->腾讯云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、Ubuntu安装docker 1、查看操作系统和CPU架构 2、卸载docker 3、配置docker下载源 4、安装docker 5、解决报错…

【STM32 物联网】AT指令与TCP,发送与接收数据

文章目录 前言一、连接TCP服务器1.1 配置Wifi模式1.2 连接路由器1.3 查询ESP8266设备IP地址1.4 连接TCP服务器 二、向服务器接收数据和发送数据2.1 发送数据2.2 接收数据 总结 前言 随着物联网&#xff08;IoT&#xff09;技术的迅速发展&#xff0c;越来越多的设备和系统开始…

政安晨:【完全零基础】认知人工智能(二)【超级简单】的【机器学习神经网络】—— 底层算法

如果小伙伴第一次看到这篇文章&#xff0c;可以先浏览一下我这个系列的上一篇文章&#xff1a; 政安晨&#xff1a;【完全零基础】认知人工智能&#xff08;一&#xff09;【超级简单】的【机器学习神经网络】 —— 预测机https://blog.csdn.net/snowdenkeke/article/details/…

阿里云服务器CPU内存配置怎么选择够用?

阿里云服务器配置怎么选择&#xff1f;根据实际使用场景选择&#xff0c;个人搭建网站可选2核2G配置&#xff0c;访问量大的话可以选择2核4G配置&#xff0c;企业部署Java、Python等开发环境可以选择2核8G配置&#xff0c;企业数据库、Web应用或APP可以选择4核8G配置或4核16G配…

技能下载中:Sora视频让机器人秒学任何技艺!

引言 在机器人成为平凡工匠和前沿先驱的时代&#xff0c;我们正站在新黎明的边缘。本文将探讨斯坦福大学的通用操作接口&#xff08;UMI&#xff09;及其与OpenAI的Sora如何共同推进机器人技术&#xff0c;开创未来学习的新纪元。 正文 斯坦福的通用操作接口&#xff08;UMI…

WildCard:一个因太好用而被迫暂停服务的虚拟信用卡平台,魅力何在?

如果你需要使用Wildcard开通GPT4、Midjourney或是Only方式的话&#xff0c;请点击&#xff1a;WildCard使用教程 参考文章链接&#xff1a;WildCard&#xff1a;一个因太好用而被迫暂停服务的虚拟信用卡平台&#xff0c;魅力何在&#xff1f; 1、Wildcard用户数量激增&#x…

Windows 编译 yangfengzzz/fluid-engine-OpenVDB

我想将 OpenVDB 接入 doyubkim 的流体引擎 https://github.com/doyubkim/fluid-engine-dev 然后搜到已经有人做过这件事了 https://github.com/yangfengzzz/fluid-engine-OpenVDB Windows 编译 yangfengzzz/fluid-engine-OpenVDB 但是我是 windows&#xff0c;所以想要编译…

MySQL系列之索引入门(下)

前言 通过上文&#xff0c;我想各位盆友已熟悉MySQL的索引分类及其含义&#xff0c;那么如何合理的使用呢&#xff1f; 请继续围观此文&#xff0c;一探究竟&#xff01; 一、创建索引 首先&#xff0c;我们一起学习索引是如何创建的&#xff0c;又有哪些方式。 1. create t…

VO、DTO、DO、BO、PO

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 VO、DTO、DO、BO1.概念阿里Java开发手册分层领域模型&#xff1a; 2. VO 和 DTO 使用场景以下是一个使用VO和DTO的典型案例&#xff1a; 3.BO和DTO的区别 案例 VO、…

数据结构1.0(基础)

近java的介绍&#xff0c; 文章目录 第一章、数据结构1、数据结构 &#xff1f;2、常用的数据结构数据结构&#xff1f; 逻辑结构and物理结构 第二章、数据结构基本介绍2.1、数组&#xff08;Array&#xff09;2.2、堆栈&#xff08;Stack&#xff09;2.3、队列&#xff08;Que…

宝塔安装MySQL、设置MySQL密码、设置navicat连接

1、登录宝塔面板进行安装 2、设置MySQL连接密码 3、安装好了设置navicat连接 登录MySQL [roothecs-394544 ~]# mysql -uroot -p Enter password: 切换到MySQL数据 mysql> use mysql Database changed mysql> 查询用户信息 mysql> select host,user from user; ---…

数据脱敏(四)脱敏算法-替换算法

脱敏算法篇使用阿里云数据脱敏算法为模板,使用算子平台快速搭建流程来展示数据 "替换脱敏"是一种数据处理技术&#xff0c;主要用于保护个人隐私和数据安全。它通过将敏感信息&#xff08;如姓名、身份证号、电话号码等&#xff09;替换为无意义或随机的字符&#xf…

完整的 vue-router 导航解析流程

在Vue.js中&#xff0c;vue-router是一个官方提供的路由管理器&#xff0c;它能够帮助我们实现页面之间的无缝切换和导航。 本文将深入探讨vue-router的导航解析流程&#xff0c;并通过示例代码演示如何使用vue-router实现完整的导航过程。 首先&#xff0c;让我们来了解一下…

Linux环境安装Maven(详细图文)

目录 摘要 一、准备工作 1.检查当前环境是否安装maven 2.下载maven ​3.上传maven压缩包 4.解压maven包 5.移动到/usr/local目录下方便管理 6.配置maven环境变量 7.刷新配置文件 8.配置maven镜像仓库 9.验证是否成功 摘要 笔者Linux环境为&#xff1a;Ubuntu 22.04 …

解决Webstorm2023使用账号连接GitLab的问题personal access token instead of a password

问题 升级Webstorm之后&#xff0c;发现gitlab仓库拉取代码报错 报错信息 remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token instead of a password. See https…

【论文精读】BERT

摘要 以往的预训练语言表示应用于下游任务时的策略有基于特征和微调两种。其中基于特征的方法如ELMo使用基于上下文的预训练词嵌入拼接特定于任务的架构&#xff1b;基于微调的方法如GPT使用未标记的文本进行预训练&#xff0c;并针对有监督的下游任务进行微调。 但上述两种策略…

kettle中JavaScript使用例子

1.将输入日期减一后&#xff0c;得到对应格式的输出 输入为20240216则Alert输出20240215 日期减一。 对应函数参考&#xff1a; https://blog.csdn.net/doasmaster/article/details/112978529