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

news/2024/4/24 1:32:16/

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, QPushButtonclass 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 sysclass 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 sysclass 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.ppmy.cn/news/1405291.html

相关文章

element-ui breadcrumb 组件源码分享

今日简单分享 breadcrumb 组件的源码实现,主要从以下三个方面: 1、breadcrumb 组件页面结构 2、breadcrumb 组件属性 3、breadcrumb 组件 slot 一、breadcrumb 组件页面结构 二、breadcrumb 组件属性 2.1 separator 属性,分隔符&#xff…

[C++11] Lambda表达式完整解析

说明:C11中的Lambda表达式是一种允许创建匿名函数对象的语法结构。Lambda表达式可以捕获作用域中的变量,并且可以像普通函数一样被调用。它们是C11标准中引入的一个重要特性,旨在提供一种方便的方式来定义内联的小型函数,特别适用…

IDEA跑Java后端项目提示内存溢出

要设置几个地方,都试一下吧: 1、默认是700,我们设置大一点(上次配置了这儿就解决了) 2、 3、 4、-Xmx4g

软件供应链安全:智慧城市建设的安全基石

2024年的两会上,数字经济再次成为热议话题。2024年政府工作任务中明确提出了“深入推进数字经济创新发展”。而其中的一项重点任务,便是建设智慧城市。 在智慧城市的建设中,软件供应链安全无疑是至关重要的一环。面对日益复杂的软件开发环境…

网站安全利剑:HTML代码加固实战手册

引言 HTML是网站开发的基础语言,它的安全性直接关系到网站的安全性。为了保障网站的安全性,我们需要加固HTML代码。本文将介绍一些具体方法,帮助你加固HTML代码,提高网站的安全性。 摘要 本文将介绍以下几种方法来加固HTML代码…

HarmonyOS 应用开发之通过数据管理服务实现数据共享静默访问

场景介绍 典型跨应用访问数据的用户场景下,数据提供方会存在多次被拉起的情况。 为了降低数据提供方拉起次数,提高访问速度,OpenHarmony提供了一种不拉起数据提供方直接访问数据库的方式,即静默数据访问。 静默数据访问通过数据…

CQI-17:2021 V2 英文 、中文版。特殊过程:电子组装制造-锡焊系统评审标准

锡焊作为一个特殊的工艺过程,由于其材料特性的差异性、工艺参数的复杂性和过程控制的不确定性,长期以来一直视为汽车零部件制造业的薄弱环节,并将很大程度上直接导致整车产品质量的下降和召回风险的上升。 美国汽车工业行动集团AIAG的特别工…

mysql闲谈

如何定位慢查询 1、测试环境压测时,有的接口非常慢,响应时间超过2秒以上。当时系统部署了运维的监控系统Skywalking,在展示报表中可以看到是哪儿个接口慢,可以看到SQL具体执行时间。 2、如果没有类似的监控系统,在Mysq…

IT库存管理

计算机资产由软件和硬件组件组成,需要在其整个生命周期内进行监控,IT 库存管理是识别、管理和维护组织的硬件和软件资产的过程,IT 资产的手动编译和核对非常费力且容易出错。 借助 IT 库存管理解决方案,可以跟踪、监控和管理计算…

【微服务】软件架构的演变之路

目录 单体式架构的时代单体式架构(Monolithic)优点缺点适用场景单体式架构面临诸多问题1.宽带提速,网民增多2.Web2.0时代的特点问题描述优化方向 集群优点缺点适用场景搭建集群后面临诸多问题用户请求问题用户的登录信息数据查询 改进后的架构 垂直架构优点缺点 分布…

Linux下I2C设备驱动:I2C设备和驱动匹配过程

一. 简介 Linux 内核也将 I2C 驱动分为两部分: (1) I2C 总线驱动, I2C 总线驱动就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。 (2) I2C 设备驱动, I2C 设备驱动就是针对具体的 I2C 设备而编写的驱动。 本文来学习一下…

新网站秒收录技术,新网站百度收录时间

在建立新网站后,让它尽快被搜索引擎收录是网站主最为关注的事情之一。百度作为中国最大的搜索引擎,网站被其快速收录对于增加曝光和流量至关重要。本文将介绍一些新网站秒收录技术,以及一般情况下新网站被百度收录需要的时间。 新网站秒收录技…

游戏引擎架构01__引擎架构图

根据游戏引擎架构预设的引擎架构来构建运行时引擎架构 ​

YOLOV5 改进:更换主干网络为Resnet

1、前言 之前实现了yolov5更换主干网络为MobileNet和vgg网络 本章将继续将yolov5代码进行更改,通过引用官方实现的resnet网络,替换原有的yolov5主干网络 替换的效果如下: 2、resnet 网络结构 测试的代码为官方的resnet34 通过summary 打印的resnet网络结构如下 =======…

git diff

1. 如何将库文件的变化生成到patch中 git diff --binary commit1 commit2 > test.patch 打patch: git apply test.patch 2. 如何消除trailing whitespace 问题 git diff --ignore-space-at-eol commit1 commit2 > test.patch 打patch: git ap…

FastAPI+React全栈开发15 让我们构建一个展示API

Chapter03 Getting Started with FastAPI 15 Let’s Build a showcase API FastAPIReact全栈开发15 让我们构建一个展示API REST APIs are all about cycles of HTTP requests and responses, it is the engine that powers the web and is implemented in every web framew…

TCP Socket通信CAPL代码演示

TCP通信过程分为三个部分: 建立连接:三次握手数据传输关闭连接:四次挥手这些都可以通过socket套接字接口来实现。 Client: variables {const dword INVALID_SOCKET = 0xFFFFFFFF;dword clientSocket = INVALID_SOCKET;char …

CentOS离线安装命令

一.引言 某些CentOS安装后默认是没有部分Linux命令的,比如netstat和lsof: 一般情况下我们可以通过yum install安装这些命令。但是在CentOS无法访问公网的时候(比如CentOS服务器部署在学校、军工等无法访问外网的环境)&#xff0c…

广东开放大学2024春《互联网金融(本)》形成性考核一二三四总400题参考答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 互联网金融的本质是 A. 双边市场经济 B. 平台经济 C. 多边…

理解游戏服务器架构-部署架构

目录 前言 我所理解的服务器架构 什么是否部署架构 部署架构的职责 进程业务职责 网络链接及通讯方式 与客户端的连接方式 服务器之间连接关系 数据落地以及一致性 数据库的选择 数据访问三级缓存 数据分片 读写分离 分布式数据处理 负载均衡 热更新 配置更新 …