【Hello,PyQt】PyQt5中的一些对话框

news2025/1/13 10:40:09

QDialog类是一种特殊的窗口,它被设计出来作为和用户进行交换的对话框。QDialog上是可以包含其他的控件的,比如QLineEdit,QPushButton等。QDialog类的子类主要有QMessageBox,QFileDialog,QColorDialog,QFontDialog,QInputDialog等。其中QMessageBox是消息提示对话框,QFileDialog是文件选择对话框,QColorDialog是颜色选择对话框,QFontDialog是字体选择对话框,QInputDialog是输入对话框

普通对话框

创建对话框QDialog

在PyQt中,使用 QDialog 显示一个普通对话框通常需要以下步骤:

  1. 创建一个 QDialog 对象。
  2. 设置窗口模态。
  3. 设置对话框的属性,例如标题、布局和其他组件。
  4. 使用 exec_() 方法来显示对话框。
dialog = QDialog()
# 设置窗口模态
dialog.setModal(True)
dialog.setWindowTitle("Simple Dialog")
# 创建布局和标签
layout = QVBoxLayout()
label = QLabel("This is a simple dialog.")
layout.addWidget(label)
# 设置对话框布局
dialog.setLayout(layout)
# 显示对话框
dialog.exec_()

自定义对话框

class InputDialog(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("InputDialog")

        # 创建布局
        self.layout = QVBoxLayout()
        self.setLayout(self.layout)

        # 添加组件
        self.label = QLabel("Enter your name:")
        self.line_edit = QLineEdit()
        self.ok_button = QPushButton("OK")
        self.cancel_button = QPushButton("Cancel")

        # 按钮布局
        button_layout = QHBoxLayout()
        button_layout.addWidget(self.ok_button)
        button_layout.addWidget(self.cancel_button)

        # 添加组件到主布局
        self.layout.addWidget(self.label)
        self.layout.addWidget(self.line_edit)
        self.layout.addLayout(button_layout)

        # 按钮事件绑定
        self.ok_button.clicked.connect(self.accept)
        self.cancel_button.clicked.connect(self.reject)

    def get_input_text(self):
        return self.line_edit.text()

关闭对话框的三种方式

关闭对话框最直接的方式就是点击右上角的那个X,但是如果我的对话框是没有边框的,就像下面这样
在这里插入图片描述

或者说就是不通过那个X关闭对话框,想通过单击一个按钮关闭对话框,那么了解对话框关闭的方式就很有必要。

使用accept()和reject()方法

这两个方法可以模拟用户点击对话框窗口的确定和取消按钮

accept() 方法用于接受对话框的内容并关闭对话框。调用 accept() 方法会发出 accepted信号。

reject() 方法用于拒绝对话框的内容并关闭对话框。调用 reject() 方法会发出 rejected信号。

import sys
from PyQt5.QtWidgets import QApplication, QDialog, QPushButton

class MyDialog(QDialog):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 200, 100)

        self.button1 = QPushButton("close", self)
        self.button1.setGeometry(80, 30, 40, 25)
        self.button1.clicked.connect(self.accept)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    dialog = MyDialog()
    dialog.show()
    sys.exit(app.exec_())

这里在连接信号的时候需要注意一个问题,这个例子里链接槽函数的时候是直接用的self.accept,但我有个朋友是这样操作的
self.button1.clicked.connect(QDialog.accept)这样写按下按钮就不会正常退出进程已结束,退出代码-1073740791 (0xC0000409)
需要改成self.button1.clicked.connect(lambda :QDialog.accept(self))

使用close()方法

close()方法可以直接关闭对话框窗口,没有模拟按钮的点击事件。

使用done()方法

使用done()方法可以传入一个整型参数表示对话框关闭后的返回值。

输入对话框

QInputDialog提供了一些静态方法可以让用户方便的输入文本、整数等数据。

  • QInputDialog.getItem:提供了选择选项的下拉列表。
  • QInputDialog.getText:获取输入的文本内容。
  • QInputDialog.getInt:提供了获取输入数字的计时器。
    QInputDialog的用法非常简单,通过下面的例子就可以掌握其用法
from PyQt5.QtWidgets import QApplication, QPushButton, QVBoxLayout, QDialog, QInputDialog, QLabel, QLineEdit
import sys

class MyDialog(QDialog):
    def __init__(self):
        super().__init__()

        layout = QVBoxLayout()
        self.setLayout(layout)

        self.item_label = QLabel("Selected item:")
        layout.addWidget(self.item_label)

        self.text_label = QLabel("Entered text:")
        layout.addWidget(self.text_label)

        self.integer_label = QLabel("Entered integer:")
        layout.addWidget(self.integer_label)

        item_button = QPushButton("Get Item")
        item_button.clicked.connect(self.get_item)
        layout.addWidget(item_button)

        text_button = QPushButton("Get Text")
        text_button.clicked.connect(self.get_text)
        layout.addWidget(text_button)

        int_button = QPushButton("Get Integer")
        int_button.clicked.connect(self.get_integer)
        layout.addWidget(int_button)

    def get_item(self):
        items = ['Apple', 'Banana', 'Orange', 'Grapes']
        item, ok = QInputDialog.getItem(self, "Item Dialog", "选择你最喜欢的水果:", items, 0, False)
        if ok and item:
            self.item_label.setText("Selected item: " + item)

    def get_text(self):
        text, ok = QInputDialog.getText(self, "Text Dialog", "输入你的名字:")
        if ok and text:
            self.text_label.setText("Entered text: " + text)

    def get_integer(self):
        value, ok = QInputDialog.getInt(self, "Integer Dialog", "输入你的年龄:", 18, 0, 100, 1)
        if ok:
            self.integer_label.setText("Entered integer: " + str(value))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    dialog = MyDialog()
    dialog.show()
    sys.exit(app.exec_())

运行效果
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

字体颜色对话框

使用QColorDialog.getColor()方法显示一个可以选择字体颜色和背景颜色的对话框。字体的颜色是不能直接设置的,要先创建一个调试板对象,调色板对象设置颜色,然后传递给指定的控件(setPalette()方法)

from PyQt5.QtWidgets import QApplication, QPushButton, QVBoxLayout, QDialog, QLabel, QColorDialog
from PyQt5.QtGui import QColor, QPalette
import sys

class MyDialog(QDialog):
    def __init__(self):
        super().__init__()

        layout = QVBoxLayout()
        self.setLayout(layout)

        self.color_label = QLabel("Hello, World!")
        layout.addWidget(self.color_label)

        font_color_button = QPushButton("选择字体颜色")
        font_color_button.clicked.connect(self.choose_font_color)
        layout.addWidget(font_color_button)

        bg_color_button = QPushButton("选择背景颜色")
        bg_color_button.clicked.connect(self.choose_bg_color)
        layout.addWidget(bg_color_button)

    def choose_font_color(self):
        color = QColorDialog.getColor()
        if color.isValid():
            # 设置字体颜色
            p = QPalette()
            p.setColor(QPalette.WindowText, color)
            self.color_label.setPalette(p)

    def choose_bg_color(self):
        color = QColorDialog.getColor()
        if color.isValid():
            # 获取当前标签的字体颜色,防止设置背景时将字体设置成默认颜色
            font_color = self.color_label.palette().color(self.color_label.foregroundRole())

            p = QPalette()
            p.setColor(QPalette.Window, color)
            p.setColor(QPalette.WindowText,font_color)
            self.color_label.setAutoFillBackground(True)
            self.color_label.setPalette(p)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    dialog = MyDialog()
    dialog.show()
    sys.exit(app.exec_())

运行效果

  • 设置字体颜色
    在这里插入图片描述

  • 设置背景颜色
    在这里插入图片描述

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

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

相关文章

如何制作一个微信小程序商城?

在这个数字化飞速发展的时代,微信小程序商城以其独特的便捷性和高效的用户连接能力,成为了电商领域的一颗新星。对于那些渴望在微信平台上开展业务的商家和企业来说,微信小程序商城不仅是一种新的尝试,更是一个充满无限可能的商机…

通过nvtx和Nsight Compute分析pytorch算子的耗时

通过nvtx和Nsight Compute分析pytorch算子的耗时 一.效果二.代码 本文演示了如何借助nvtx和Nsight Compute分析pytorch算子的耗时 一.效果 第一次执行,耗时很长 小规模的matmul,调度耗时远大于算子本身 大规模的matmul,对资源的利用率高小规模matmul,各层调用的耗时 二.代码…

Sketch webView方式插件开发技术总结

Sketch作为一款广受欢迎的矢量图形设计工具,其功能远不止基础的矢量设计,它的真正实力部分源自其丰富的插件生态系统。Sketch向开发者提供了官方的第三方插件接口,这使得整个社区能够创建和分享众多功能各异的插件,极大地拓展了Sk…

sdrangel使用说明

使用说明 首先找一个usrp设备,我找到的是b205进行连接。打开生成的sdrangel.exe,第一次打开会出现空白界面 点击Add Rx Device按钮。 然后会弹出一个设备刷新窗口,选择你需要的设备 点击OK后,会响应一段时间,然后弹…

实用VBA:18.角度或坐标的格式转换(单位换算)

1.需求场景 在某些行业工作中,可能会遇到需要将角度或者坐标数值进行格式转换或者单位换算的情形。有很多小工具可以实现这样的换算,也有一些大型的专业软件带有单位换算的模块或者小插件,或者在excel单元格中写入计算公式。其实使用VBA写个函…

ImportError: cannot import name ‘PILLOW_VERSION‘ from ‘PIL‘

原因:torchvision模块在运行时要调用PIL模块的PILLOW_VERSION函数,但PILLOW_VERSION在Pillow 7.0.0之后的版本被移除了,Pillow 7.0.0之后的版本使用__version__函数代替PILLOW_VERSION函数。 解决方法:降低pillow版本即可。 参考…

网络原理 - HTTP / HTTPS(2)——http请求

目录 一、认识 “方法”(method) 1、GET方法 2、POST方法 (1)登录 (2)上传 (3)GET和POST使用习惯 3、GET方法和POST方法的区别 正确滴 关于一些网上的说法,错误滴…

两数之和-考察哈希表的运用

题目 给定一个整数数组 n u m s nums nums和一个整数目标值 t a r g e t target target,请你在该数组中找出和为目标值 t a r g e t target target的那 两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同…

Apache ECharts-数据统计(详解、入门案例)

简介:Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。 1、介绍 图 1.1 Apache ECharts 功能、运行环境 功能: ECharts&#xff…

pymc,一个灵活的的 Python 概率编程库!

目录 前言 安装与配置 概率模型 贝叶斯推断 概率分布 蒙特卡罗采样 贝叶斯网络 实例分析 PyMC库的应用场景 1. 概率建模 2. 时间序列分析 3. 模式识别 总结 前言 大家好,今天为大家分享一个超强的 Python 库 - pymc Github地址:https://gith…

开源大模型AI代理操作系统:像Windows一样,操控AI代理

去年,AutoGPT的出现让我们见识到了AI代理强大的自动化能力,并开创了一个全新的AI代理赛道。但在子任务调度、资源分配以及AI之间协作还有不少的难题。 因此,罗格斯大学的研究人员开源了AIOS,这是一种以大模型为核心的AI代理操作系…

JVM 记录

记录 工具 https://gceasy.io 资料 尚硅谷宋红康JVM全套教程(详解java虚拟机) https://www.bilibili.com/video/BV1PJ411n7xZ?p361 全套课程分为《内存与垃圾回收篇》《字节码与类的加载篇》《性能监控与调优篇》三个篇章。 上篇《内存与垃圾回收篇…

鸿蒙开发-ArkTS语言-并发

鸿蒙开发-UI-交互事件-键鼠事件 鸿蒙开发-UI-交互事件-焦点事件 鸿蒙开发-UI-交互事件-手势事件 鸿蒙开发-UI-web 鸿蒙开发-UI-web-页面 鸿蒙开发-ArkTS语言-基础类库 文章目录 前言 一、并发概述 二、异步并发开发 1. 异步并发概述 1.1 Promise 1.2 async/await 2. 单次…

Linxu的开发工具(三):缓冲区、进度条程序和调试器gdb

目录 缓冲区 倒计时程序 对出现swp文件报错的补充: 进度条程序 将tab键设置为四个空格 调试器-gdb 对比测试 实际应用 缓冲区 前言:\n会产生换行和回车两个动作: 回车:回到下一行行首换行:移动到当前所在位置…

《大模型面试宝典》(2024版) 正式发布!

2022 年11月底,OpenAI 正式推出 ChatGPT ,不到两个月的时间,月活用户就突破1亿,成为史上增长最快的消费者应用。 目前国内已发布的大模型超过200个,大模型的出现彻底改变了我们的生活和学习方式。 只要你想从事 AI 相…

【论文阅读笔记】SAM-Adapter: Adapting Segment Anything in Underperformed Scenes

1.论文介绍 SAM-Adapter: Adapting Segment Anything in Underperformed Scenes SAM适配器:在表现不佳的场景中适配任何片段 2023年 ICCV Paper Code SAM Fails to Segment Anything? – SAM-Adapter: Adapting SAM in Underperformed Scenes: Camouflage, Shado…

HR是怎么看待PMP证书的呢?

考PMP证书为什么值得?对管理人员有用么? 首先,在行业内部,一名项目经理,需要有PMP证书已经是行业内的共识了。而且面试的时候,如果是同样的年龄段,同样的背景,那有证书在手的人&…

2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现: 交通运输作为国民经济的载体,沟通生产和消费,在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系,生产水平越高…

九州金榜家庭教育:关注孩子心理健康,增强亲子沟通

家庭教育现在越来越受重视,尤其孩子心理健康,当下社会,孩子心理健康问题频出,很多地方不时传出孩子轻生的新闻,这就是在教育过程中,沟通出现了严重问题,随着心理变化产生,孩子这时候…

Python(乱学)

字典在转化为其他类型时,会出现是否舍弃value的操作,只有在转化为字符串的时候才不会舍弃value 注释的快捷键是ctrl/ 字符串无法与整数,浮点数,等用加号完成拼接 5不入??? 还有一种格式化的方法…