【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;越来越多的设备和系统开始…

【开源】C++ 周期任务调度的思想和实现

​ 今天调休&#xff0c;抓住年假的最后一天&#xff0c;将构思多日适合将并行任务串行执行的框架实现出来。 核心思想&#xff1a; 将各个独立的功能模块作为周期性的任务。在主循环集中调度所有任务&#xff0c;让各个功能模块依次有处理事项的机会。如果处理事项较为耗时&…

BES 平台 SDK之串口指令

本文章是基于BES2700 芯片&#xff0c;其他BESxxx 芯片可做参考&#xff0c;如有不当之处&#xff0c;欢迎评论区留言指出。仅供参考学习用&#xff01; 上位机下发格式&#xff1a; 格式一&#xff1a;[A,B] 格式二&#xff1a;A:B 固定格式&#xff1a;auto_test&#xff1a…

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

如果小伙伴第一次看到这篇文章&#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…

Vite之对CSS的处理方式及使用

Vite之对CSS的处理方式及使用 文章目录 Vite之对CSS的处理方式及使用1. 直接对CSS处理2. 使用css预处理器less 1. 直接对CSS处理 可直接导入css进行使用&#xff0c;而不需要任何配置 定义样式文件&#xff1a;myStyle.css body {background-clor:red }导入css文件 import …

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;所以想要编译…

ubuntu22.04-cmake-添加动态库-静态库-添加头文件夹所在位置-管理员启动

文章目录 1.引用库命令-target_link_libraries2.命令行添加头文件夹和库文件夹所在位置3.添加头文件目录-include_directories4.target_include_directories5.生成库-add_library6.静态库-共享库7.管理员任务管理器1.引用库命令-target_link_libraries 作用 指定链接给定目标和…

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、…

259.【华为OD机试真题】特殊的加密算法(深度优先搜索(DFS)-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-特殊的加密算法二.解题思路三.题解代码Python题…

js-后端返回参数前端动态切换组件样式

1.js枚举 // 枚举-js //对应的icon显示 EnumUtil.Type { COMMON: 1, BUY: 2, PRODUCE: 3} 2.动态公共样式组件 <!-- 公共组件-显示对应icon --> <template><div v-html"TaskIcon(statues)" class"pro_set_task"></div> </t…

数据结构1.0(基础)

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

GET 和 POST 的区别?

get 参数通过 url 传递&#xff0c;post 放在 request body 中。 get 请求在 url 中传递的参数是有长度限制的&#xff0c;而 post 没有。 get 比 post 更不安全&#xff0c;因为参数直接暴露在 url 中&#xff0c;所以不能用来传递敏感信息。 get 请求只能进行 url 编码&am…