PyQt5 的对话框

news2024/9/29 17:35:43

文章目录

    • 1. 简介
    • 2. 输入对话框
    • 3. 文件对话框
    • 4. 颜色对话框
    • 5. 字体对话框
    • 6. 进度对话框

1. 简介

PyQt5中的对话框是一种常见的用户界面组件,用于与用户进行交互并获取用户输入或确认。常见的对话框包括消息框、输入框、文件对话框、颜色对话框等。PyQt5提供了丰富的对话框类,可以满足各种不同的需求。下面简要介绍一些常见的对话框:

  1. QMessageBox(消息框):用于显示消息、警告、错误等信息,并可以包含按钮供用户进行选择。
  2. QInputDialog(输入对话框):用于获取用户输入,包括文本输入、整数输入、浮点数输入等。
  3. QFileDialog(文件对话框):用于打开或保存文件,以及选择文件或文件夹。
  4. QColorDialog(颜色对话框):用于选择颜色。
  5. QFontDialog(字体对话框):用于选择字体。
  6. QProgressDialog(进度对话框):用于显示长时间运行任务的进度。

这些对话框类通常都是模态的,这意味着当一个对话框显示时,用户必须完成对话框的操作才能继续与应用程序交互。对话框的使用通常涉及以下步骤:

  1. 创建对话框实例。
  2. 设置对话框的属性和选项(如标题、消息、按钮等)。
  3. 显示对话框。
  4. 处理用户操作(如获取用户输入、响应用户的选择等)。
  5. 根据用户操作执行相应的逻辑处理。

PyQt5提供了丰富的文档和示例来帮助开发者了解和使用这些对话框类,使得在应用程序中实现用户友好的交互变得更加容易。

2. 输入对话框

输入对话框(QInputDialog)是PyQt5中常用的对话框之一,用于获取用户输入。它可以用于获取文本、整数、浮点数等不同类型的输入。下面是一个简单的示例,演示如何使用输入对话框获取用户输入,并在窗口中显示输入结果。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QInputDialog, QLabel

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
    def initUI(self):
        self.setWindowTitle('Input Dialog Example')
        self.setGeometry(300, 300, 300, 200)
        
        self.button = QPushButton('Get Input', self)  # 创建一个按钮用于触发输入对话框
        self.button.setGeometry(100, 50, 100, 30)
        self.button.clicked.connect(self.showInputDialog)  # 连接按钮的点击事件到自定义的方法
        
        self.label = QLabel(self)  # 创建一个标签用于显示输入结果
        self.label.setGeometry(100, 100, 200, 30)
        
    def showInputDialog(self):
        text, okPressed = QInputDialog.getText(self, "Get text", "Your name:")  # 显示文本输入对话框,并获取用户输入和确认状态
        
        if okPressed:  # 如果用户点击了确认按钮
            self.label.setText('Your name is: ' + text)  # 在标签中显示用户输入的文本
            
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

在这个示例中,

  1. import sys: 导入sys模块,用于与Python解释器进行交互。
  2. from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QInputDialog, QLabel: 从PyQt5.QtWidgets模块中导入QApplication(应用程序类)、QMainWindow(主窗口类)、QPushButton(按钮类)、QInputDialog(输入对话框类)和QLabel(标签类)。
  3. class Example(QMainWindow):: 创建一个名为Example的类,继承自QMainWindow类。
  4. def __init__(self):: Example类的构造函数。
  5. super().__init__(): 调用父类(QMainWindow)的构造函数。
  6. self.initUI(): 调用自定义的initUI()方法,用于初始化用户界面。
  7. def initUI(self):: 自定义的方法,用于初始化用户界面。
  8. self.setWindowTitle('Input Dialog Example'): 设置窗口标题为"Input Dialog Example"。
  9. self.setGeometry(300, 300, 300, 200): 设置窗口的位置和大小。
  10. self.button = QPushButton('Get Input', self): 创建一个名为"Get Input"的按钮,并将其与当前窗口关联。
  11. self.button.setGeometry(100, 50, 100, 30): 设置按钮的位置和大小。
  12. self.button.clicked.connect(self.showInputDialog): 将按钮的点击事件连接到自定义的showInputDialog()方法。
  13. self.label = QLabel(self): 创建一个标签,并将其与当前窗口关联。
  14. self.label.setGeometry(100, 100, 200, 30): 设置标签的位置和大小。
  15. def showInputDialog(self):: 自定义的方法,用于显示输入对话框。
  16. text, okPressed = QInputDialog.getText(self, "Get text", "Your name:"): 显示文本输入对话框,提示用户输入姓名,并获取用户输入的文本和确认状态。
  17. if okPressed:: 检查确认状态是否为True。
  18. self.label.setText('Your name is: ' + text): 如果用户点击了确认按钮,则在标签中显示用户输入的文本。
  19. if __name__ == '__main__':: Python中的惯用法,检查当前脚本是否作为主程序运行。
  20. app = QApplication(sys.argv): 创建应用程序对象。
  21. ex = Example(): 创建Example类的实例。
  22. ex.show(): 显示主窗口。
  23. sys.exit(app.exec_()): 运行应用程序的主事件循环,并确保在退出时清理系统资源。

运行结果如下:

在这里插入图片描述

3. 文件对话框

文件对话框(QFileDialog)是PyQt5中常用的对话框之一,用于打开或保存文件,并允许用户选择文件或文件夹。文件对话框通常用于文件操作相关的功能,如打开文件、保存文件等。下面是一个简单的示例,演示如何使用文件对话框来获取用户选择的文件路径,并在窗口中显示选择的文件名。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QFileDialog, QLabel


class Example(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setWindowTitle('File Dialog Example')
        self.setGeometry(300, 300, 800, 200)

        self.button = QPushButton('Open File', self)  # 创建一个按钮用于触发文件对话框
        self.button.setGeometry(100, 50, 100, 30)
        self.button.clicked.connect(self.showFileDialog)  # 连接按钮的点击事件到自定义的方法

        self.label = QLabel(self)  # 创建一个标签用于显示文件名
        self.label.setGeometry(100, 100, 500, 100)

    def showFileDialog(self):
        options = QFileDialog.Options()  # 创建文件对话框选项对象

        fileName, _ = QFileDialog.getOpenFileName(self, "Open File", "", "All Files (*)",
                                                  options=options)  # 显示打开文件对话框,并获取用户选择的文件名

        if fileName:  # 如果用户选择了文件
            self.label.setText('Selected File: ' + fileName)  # 在标签中显示选择的文件名


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

其中,

  1. self.button = QPushButton('Open File', self): 创建一个名为"Open File"的按钮,并将其与当前窗口关联。
  2. self.button.clicked.connect(self.showFileDialog): 将按钮的点击事件连接到自定义的showFileDialog()方法。
  3. self.label = QLabel(self): 创建一个标签,并将其与当前窗口关联。
  4. self.label.setGeometry(100, 100, 500, 100): 设置标签的位置和大小。
  5. def showFileDialog(self):: 自定义的方法,用于显示文件对话框。
  6. options = QFileDialog.Options(): 创建文件对话框选项对象。
  7. fileName, _ = QFileDialog.getOpenFileName(self, "Open File", "", "All Files (*)", options=options): 显示打开文件对话框,并获取用户选择的文件名。
  8. if fileName:: 检查用户是否选择了文件。
  9. self.label.setText('Selected File: ' + fileName): 如果用户选择了文件,则在标签中显示选择的文件名。

运行结果如下

在这里插入图片描述

4. 颜色对话框

颜色对话框(QColorDialog)是PyQt5中常用的对话框之一,用于选择颜色。它提供了一种方便的方式让用户选择所需的颜色。下面是一个简单的示例,演示如何使用颜色对话框来获取用户选择的颜色,并在窗口中显示选择的颜色。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QColorDialog, QLabel
from PyQt5.QtGui import QColor

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
    def initUI(self):
        self.setWindowTitle('Color Dialog Example')
        self.setGeometry(300, 300, 300, 200)
        
        self.button = QPushButton('Choose Color', self)  # 创建一个按钮用于触发颜色对话框
        self.button.setGeometry(100, 50, 100, 30)
        self.button.clicked.connect(self.showColorDialog)  # 连接按钮的点击事件到自定义的方法
        
        self.label = QLabel(self)  # 创建一个标签用于显示选择的颜色
        self.label.setGeometry(100, 100, 200, 30)
        
    def showColorDialog(self):
        color = QColorDialog.getColor()  # 显示颜色选择对话框,并获取用户选择的颜色
        
        if color.isValid():  # 如果用户选择了有效的颜色
            self.label.setText('Selected Color: ' + color.name())  # 在标签中显示选择的颜色的名称
            
            # 设置标签的背景颜色为用户选择的颜色
            self.label.setStyleSheet("background-color: %s" % color.name())
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

其中,

  1. from PyQt5.QtGui import QColor: 从PyQt5.QtGui模块中导入QColor类,用于处理颜色。
  2. self.button = QPushButton('Choose Color', self): 创建一个名为"Choose Color"的按钮,并将其与当前窗口关联。
  3. self.button.clicked.connect(self.showColorDialog): 将按钮的点击事件连接到自定义的showColorDialog()方法。
  4. self.label = QLabel(self): 创建一个标签,并将其与当前窗口关联。
  5. def showColorDialog(self):: 自定义的方法,用于显示颜色对话框。
  6. color = QColorDialog.getColor(): 显示颜色选择对话框,并获取用户选择的颜色。
  7. if color.isValid():: 检查用户是否选择了有效的颜色。
  8. self.label.setText('Selected Color: ' + color.name()): 如果用户选择了有效的颜色,则在标签中显示选择的颜色的名称。
  9. self.label.setStyleSheet("background-color: %s" % color.name()): 将标签的背景颜色设置为用户选择的颜色。注意,这里使用了setStyleSheet方法来动态设置样式。这样可以将标签的背景颜色设置为用户选择的颜色。

运行结果如下

在这里插入图片描述

5. 字体对话框

字体对话框(QFontDialog)是PyQt5中的对话框之一,用于选择文本的字体。它允许用户选择字体的类型、大小、样式等,并提供了一种方便的方式来定制文本的外观。下面是一个简单的示例,演示如何使用字体对话框来获取用户选择的字体,并在窗口中显示选择的字体效果。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QFontDialog, QLabel

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
    def initUI(self):
        self.setWindowTitle('Font Dialog Example')
        self.setGeometry(300, 300, 300, 200)
        
        self.button = QPushButton('Choose Font', self)  # 创建一个按钮用于触发字体对话框
        self.button.setGeometry(100, 50, 100, 30)
        self.button.clicked.connect(self.showFontDialog)  # 连接按钮的点击事件到自定义的方法
        
        self.label = QLabel('Font Example', self)  # 创建一个标签用于显示选择的字体效果
        self.label.setGeometry(100, 100, 200, 30)
        
    def showFontDialog(self):
        font, okPressed = QFontDialog.getFont()  # 显示字体选择对话框,并获取用户选择的字体
        
        if okPressed:  # 如果用户点击了确认按钮
            self.label.setFont(font)  # 设置标签的字体为用户选择的字体
            
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

运行结果如下

在这里插入图片描述

6. 进度对话框

进度对话框(QProgressDialog)是PyQt5中的对话框之一,用于显示长时间运行任务的进度。它通常在需要执行长时间任务时显示,以便向用户展示任务的进度,并允许用户取消任务。下面是一个简单的示例,演示如何使用进度对话框来模拟长时间运行的任务,并在窗口中显示进度。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QProgressDialog
from PyQt5.QtCore import Qt, QThread, pyqtSignal

class Worker(QThread):
    progress_changed = pyqtSignal(int)  # 定义一个信号,用于更新进度
    
    def run(self):
        for i in range(101):  # 模拟长时间运行的任务
            self.progress_changed.emit(i)  # 发射进度信号
            self.msleep(100)  # 等待100毫秒

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
    def initUI(self):
        self.setWindowTitle('Progress Dialog Example')
        self.setGeometry(300, 300, 300, 200)
        
        self.button = QPushButton('Start Task', self)  # 创建一个按钮用于触发任务
        self.button.setGeometry(100, 50, 100, 30)
        self.button.clicked.connect(self.startTask)  # 连接按钮的点击事件到自定义的方法
        
    def startTask(self):
        dialog = QProgressDialog(self)  # 创建进度对话框
        dialog.setWindowTitle('Task Progress')  # 设置对话框标题
        dialog.setLabelText('Running Task...')  # 设置进度对话框的文本标签
        dialog.setCancelButton(None)  # 禁用取消按钮
        
        worker = Worker()  # 创建工作线程
        worker.progress_changed.connect(dialog.setValue)  # 连接工作线程的进度信号到进度对话框的setValue()槽函数
        worker.start()  # 启动工作线程
        
        dialog.exec_()  # 显示进度对话框
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

其中,

  1. from PyQt5.QtCore import Qt, QThread, pyqtSignal: 从PyQt5.QtCore模块中导入Qt(Qt常量)、QThread(线程类)和pyqtSignal(信号类)。
  2. class Worker(QThread):: 创建一个名为Worker的线程类,继承自QThread类。
  3. progress_changed = pyqtSignal(int): 定义一个名为progress_changed的信号,用于更新进度。信号的参数是整数类型,表示进度的百分比。
  4. def run(self):: 重写Worker类的run()方法,用于执行长时间运行的任务。
  5. for i in range(101):: 循环模拟长时间运行的任务,从0到100。
  6. self.progress_changed.emit(i): 发射进度信号,通知进度对话框当前进度。
  7. self.msleep(100): 线程休眠100毫秒,模拟任务执行时间。
  8. class Example(QMainWindow):: 创建一个名为Example的类,继承自QMainWindow类。
  9. def initUI(self):: 初始化用户界面的方法。
  10. self.setWindowTitle('Progress Dialog Example'): 设置窗口标题为"Progress Dialog Example"。
  11. self.setGeometry(300, 300, 300, 200): 设置窗口的位置和大小。
  12. self.button = QPushButton('Start Task', self): 创建一个名为"Start Task"的按钮,并将其与当前窗口关联。
  13. self.button.setGeometry(100, 50, 100, 30): 设置按钮的位置和大小。
  14. self.button.clicked.connect(self.startTask): 将按钮的点击事件连接到自定义的startTask()方法。
  15. def startTask(self):: 自定义的方法,用于启动任务并显示进度对话框。
  16. dialog = QProgressDialog(self): 创建进度对话框。
  17. dialog.setWindowTitle('Task Progress'): 设置对话框标题为"Task Progress"。
  18. dialog.setLabelText('Running Task...'): 设置进度对话框的文本标签为"Running Task…"。
  19. dialog.setCancelButton(None): 禁用取消按钮,防止用户中途取消任务。
  20. worker = Worker(): 创建Worker类的实例,即工作线程。
  21. worker.progress_changed.connect(dialog.setValue): 将工作线程的progress_changed信号连接到进度对话框的setValue()槽函数,用于更新进度。
  22. worker.start(): 启动工作线程,即开始执行长时间运行的任务。
  23. dialog.exec_(): 显示进度对话框,阻塞主线程,直到对话框关闭。

运行结果如下

在这里插入图片描述

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

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

相关文章

VBA在Excel中登录页面的应用—动态密码设置

https://mp.weixin.qq.com/s?__biz=MzkwMzY1OTIzOA==&mid=2247484420&idx=1&sn=5f98ef156cd6a784f0b1e64eed11ee42&chksm=c093af8df7e4269bdda3ed4adc37ce5f30707760ad42a2e0c6c3278ff0a0c5fcaf890016f9b5&token=1012529499&lang=zh_CN#rd 文章目录 …

.NET Web配置解析WebShell (含工具视频)

01WebPages配置项 在 .NET 应用程序中,"webpages:Enabled" 是一个用于启用或禁用 Web 页面功能的配置项。当它的值为 "true" 时,表示启用了 Web 页面功能,允许在应用程序中使用 .cshtml 或 .vbhtml 文件。而当它的值为 &…

网络 | 应用层-websocket协议报文格式解析

websocket的官方文档为rfc(request for comments),是网络协议的规范文档。它包含了许多计算机世界的核心知识 除了这里的websocket,它里边还包含我们熟知的http,tcp等协议的解析。 websocket协议对应的编号是rfc 6455 websocket协议格式解析 由图可知&a…

信安标委发布16项网络安全国家标准:8项为旧标准替代,8项标准为新发布

1. 背景 根据2024年4月25日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告(2024年第6号),全国网络安全标准化技术委员会归口的16项国家标准正式发布。 2. 标准清单 本次国家标准涵盖了信息技术安全评估准则、…

RTT PIN设备学习

获取GPIO编号 GET_PIN(port, pin)#define LED_BLUE_PIN GET_PIN(A, 0)设置引脚模式 void rt_pin_mode(rt_base_t pin, rt_base_t mode);设置引脚电平 void rt_pin_write(rt_base_t pin, rt_base_t value);rt_base_t pin 同上, 为引脚编号,尽量通过宏定…

网络安全(6) 模拟实验 Metasploit 控制并获取Windows 登录HASH、LM Hash和NTLM Hash密文解析

窃取WINDOWS账号密码 系统环境:主机(Windows系统 IP:192.168.126.129),虚拟机(KALI系统 IP:192.168.126.3),两者需要能通过本地网络互通互连。 攻击工具:Metasploit是一…

14:java基础-Tomcat-Web容器

文章目录 面试题Web 容器是什么?HTTP 的本质 面试题 Web 容器是什么? 让我们先来简单回顾一下 Web 技术的发展历史,可以帮助你理解 Web 容器的由来。早期的 Web 应用主要用于浏览新闻等静态页面,HTTP 服务器(比如Apa…

打开IE浏览器自动跳转微软的edge浏览器,取消自动跳转

打开IE浏览器会自动跳转微软的edge浏览器 不想跳转的解决办法 1.Win Q 输入 Internet,点击Internet 选项 2.去掉勾选 启用第三方浏览器扩展,然后就不自动跳转了 3. 完成

解决电脑睡眠后,主机ping不通VMware虚拟机

文章目录 问题解决方法方法一方法二注意 问题 原因:电脑休眠一段时间,再次打开电脑就ping不通VMware虚拟机。 解决方法 方法一 重启电脑即可,凡是遇到电脑有毛病,重启能解决90%问题。但是重启电脑比较慢,而且重启…

Android动态布局framelayout

功能说明 最近碰到一个需求,要求在网页端拖控件,动态配置app控件的模块,大小和位置,显示不同的功能,然后在app大屏展示。 技术难点: 1.动态控件位置和大小难调,会出现布局混乱,位置错…

STL——queue容器【队列】

queue的基本概念&#xff1a; 概念&#xff1a;queue是一种先进先出的数据结构&#xff0c;它有两个出口 queue的构造函数&#xff1a; 构造函数&#xff1a; queue<T>que:采用模板类实现&#xff0c;queue对象的默认构造形式 queue(const queue &que):拷贝构造函…

SpringBoot项目代码反编译、加密

话不多说&#xff0c;直接上干活 1. 引入依赖地址和依赖 在maven的setting.xml中添加 <repositories><repository><id>jitpack.io</id><url>https://jitpack.io</url></repository> </repositories>在需要加密的项目的pom.x…

ORACLE ODA一体机存储节点电源故障的分析处理

近期&#xff0c;某用户的ORACLE ODA一体机在例行机房巡检时出现亮黄灯告警&#xff1b;用户反馈次问题后我们立刻通过远程方式&#xff0c;登陆ODA的控制台进行查看&#xff1b; 对于ODA一体机&#xff08;2个计算节点1个存储节点&#xff09;&#xff0c;计算节点可以通过il…

LabVIEW MEMS电容式压力传感器测试系统

LabVIEW MEMS电容式压力传感器测试系统 随着微电子技术的发展&#xff0c;MEMS&#xff08;微电机系统&#xff09;技术在各个领域得到了广泛应用。MEMS电容式压力传感器以其高灵敏度、小尺寸、低功耗等优点&#xff0c;在微传感器领域占据了重要的地位。然而&#xff0c;这些…

【Spring】Spring 整合 Junit、MyBatis

一、 Spring 整合 Junit <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

Wallace树乘法器及Verilog实现

一、Wallace树乘法器 Wallace树乘法器就是将多个部分积进行分组&#xff0c;每三个一组&#xff0c;最后如果剩下的部分积个数不够三个的不做处理&#xff0c;然后将各组的部分积进行相加得到和以及进位信息&#xff0c;直到最终只剩下两行部分积&#xff0c;相加后得到最终结…

作为网络安全工程师需要掌握的安全小知识!

网络安全风险无处不在&#xff0c;今天为大家梳理了一些网络安全相关的小知识&#xff0c;希望能进一步提升大家的安全意识&#xff0c;帮助大家建立更加安全的网络环境。 一、主机电脑安全 1、操作系统安全&#xff1a;安装操作系统时需要选择合适的版本&#xff0c;及时打补…

RabbitMQ高级(MQ的问题,消息可靠性,死信交换机,惰性队列,MQ集群)【详解】

目录 一、MQ的问题 1. 问题说明 2. 准备代码环境 1 创建project 2 创建生产者模块 3 创建消费者模块 二、消息可靠性 1. 介绍 2. 生产者确认机制 3. MQ消息持久化 4. 消费者确认机制 5. 消费者auto模式的失败重试 6. 小结 三、死信交换机和延迟消息 1. 介绍 2. …

李彦宏回顾大模型重构百度这一年

“大模型我们走在最前面&#xff0c;我们需要去勇闯无人区&#xff0c;需要去冒前人没有冒过的风险。”近日&#xff0c;在百度一场内部颁奖活动中&#xff0c;百度创始人、董事长兼首席执行官李彦宏指出&#xff0c;百度一直坚信技术可以改变世界&#xff0c;会一直沿着这条路…

【Web】CTFSHOW 七夕杯 题解

目录 web签到 easy_calc easy_cmd web签到 CTF中字符长度限制下的命令执行 rce(7字符5字符4字符)汇总_ctf中字符长度限制下的命令执行 5个字符-CSDN博客7长度限制直接梭了 也可以打临时文件RCE import requestsurl "http://4ae13f1e-8e42-4afa-a6a6-1076acd08211.c…