PySide6 之自定义弹出框

news/2025/9/24 14:50:51/文章来源:https://www.cnblogs.com/yang-2018/p/19109228

一、效果图

image

二、示例代码

核心代码

class MyBaseDialog(QDialog):def __init__(self, parent = None):super().__init__(parent)self._hBoxLayout = QHBoxLayout(self)# 遮罩层self.windowMask = QWidget(self)self.widget = QFrame(self, objectName='centerWidget')# 窗口无边框
        self.setWindowFlags(Qt.WindowType.FramelessWindowHint)self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)# 设置与父窗口尺寸一直
        self.setGeometry(0, 0, parent.width(), parent.height())c = 0self.windowMask.resize(self.size())# 设置遮罩层背景色self.windowMask.setStyleSheet(f'background:rgba({c}, {c}, {c}, 0.6)')self._hBoxLayout.addWidget(self.widget)# 装载事件过滤
        self.window().installEventFilter(self)def showEvent(self, arg__1):return super().showEvent(arg__1)def closeEvent(self, arg__1):return super().closeEvent(arg__1)def resizeEvent(self, e):self.windowMask.resize(self.size())'''事件过滤器,设置遮罩层与父窗口尺寸一样'''def eventFilter(self, obj, e: QEvent):if obj is self.window():if e.type() == QEvent.Resize:re = QResizeEvent(e)self.resize(re.size())return super().eventFilter(obj, e)class MyDialog(MyBaseDialog):yes_signal = Signal()cancel_signal = Signal()def __init__(self, title:str, content:str, parent=None):super().__init__(parent)self.content = contentself.title_lable = QLabel(title, self.widget)self.content_label = QLabel(content, self.widget)self.yes_btn = QPushButton("确定",self.widget)self.cancel_btn = QPushButton("取消",self.widget)self.__init_ui()def __init_ui(self):# 设置组件位置self.widget.setMaximumWidth(500)self.title_lable.move(24, 24)self.content_label.move(24, 56)self.content_label.adjustSize()self.widget.setFixedSize(48+self.content_label.width(), self.content_label.y() + self.content_label.height()+92)self.yes_btn.resize((self.widget.width() - 54) // 2, 32)self.cancel_btn.resize(self.yes_btn.width(), 32)self.yes_btn.move(24, self.widget.height()-56)self.cancel_btn.move(self.widget.width()-24-self.cancel_btn.width(), self.widget.height()-56)self.windowMask.setObjectName('windowMask')self.title_lable.setObjectName("title_label")self.content_label.setObjectName('content_lable')self.yes_btn.setObjectName("yes_btn")self.cancel_btn.setObjectName("cancel_btn")# 设置样式
        self.widget.setStyleSheet("""QWidget {background-color: white;border: 1px solid rgb(200, 200, 200);}QWidget#windowMask {background-color: rgba(255, 255, 255, 0.6);border: none;}QLabel {background-color: transparent;color: black;font-family: 'Segoe UI', 'Microsoft YaHei', 'PingFang SC';border: none;}QLabel#title_lable {font-size: 18px;}QLabel#content_label {font-size: 14px;}QPushButton {background-color: rgb(204, 204, 204);font: 15px 'Segoe UI', 'Microsoft YaHei', 'PingFang SC';border: transparent;}QPushButton:pressed:hover {background-color: rgb(153, 153, 153);}QPushButton:hover {background-color: rgb(230, 230, 230);}QPushButton:disabled {background-color: rgb(204, 204, 204);color: rgb(122, 122, 122);}""")self.yes_btn.clicked.connect(self.__click_yes)self.cancel_btn.clicked.connect(self.__click_cancel)def __click_yes(self):self.close()self.yes_signal.emit()def __click_cancel(self):self.close()self.cancel_signal.emit()
View Code

使用代码

class Demo(QWidget):def __init__(self):super().__init__()self.init_ui()def init_ui(self):self.resize(500, 400)self.setWindowTitle("我的提示框")box = QHBoxLayout(self)btn1 = QPushButton("提示", self)btn1.clicked.connect(self.show_info)box.addWidget(btn1)box.setAlignment(Qt.AlignmentFlag.AlignLeft)def show_info(self):d = MyDialog("提示", "我的提示框我的提示框", self)if d.exec():print('确定按钮被点击')else:print("取消按钮被点击")# self.d.yes_signal.connect(lambda: print("确定按钮被点击"))# self.d.cancel_signal.connect(lambda: print("取消按钮被点击"))def show_warning(self):passdef resizeEvent(self, event):super().resizeEvent(event)if __name__ == '__main__':app = QApplication(sys.argv)d = Demo()d.show()app.exit(app.exec())

 

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

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

相关文章

实用指南:数学建模--Topsis(Python)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CF932E Team Work

代数推导天地灭,组合意义保平安。其实啥也不会 将题目转化为,有 \(k\) 个带标号的奶龙,要分给 \(i\) 个带标号的树气,其中这 \(i\) 个树气是从 \(n\) 个树气中选出来的,求总方案数。 首先你考虑到会有很多树气选不…

襄阳市住房和城乡建设局官方网站网站服务器端口如何做防护

Trunc 在oracle中,可利用 trunc函数 查询当天数据,该函数可用于截取时间或者数值,将该函数与 select 语句配合使用可查询时间段数据 查询当天数据 --sysdate是获取系统当前时间函数 --TRUNC函数用于截取时间或者数值,返回指定的…

HTTP3与HTTP2的性能对比

HTTP/3 相对于 HTTP/2 的性能提升是显著的,但其优势并非在所有场景下都立竿见影。核心的差异源于底层传输协议从 TCP 切换到了 QUIC(基于 UDP)。 下面我们从几个关键维度进行详细对比,并总结适用场景。核心差异:T…

KubeSphere 社区版即将发布:开启云原生新篇章

各位社区朋友,大家好。最近 KubeSphere 社区版的消息引发了不少讨论。KubeSphere 社区版即将于国庆后和大家见面。今天,我们想先向大家介绍一下 KubeSphere 社区版。 为什么推出社区版 云原生技术发展至今,Kubernet…

从零开始:c#如何优雅的操作临时文件/数据?以ASP文件下载为例

从零开始:c#如何优雅的操作临时文件/数据?以ASP文件下载为例在程序开发中,我们经常需要处理临时文件,例如:安全替换大文件:先将内容写入临时文件,成功后再替换目标文件,避免写入过程中断导致数据损坏。 进程间数…

KDL - 金山云数据湖系统参数

KDL - 金山云数据湖系统参数 ${flow.name} ${flow.id} ${job.name} ${job.id} ${biz.date} #20250924 ${yyyyMM} #202509

表情网站源码网站里面内外链接如何做

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&…

wordpress搭建个人网站费用wordpress 8080

我们每天都在开发Java,每天都在使用JDK,那么我们了解JDK的发展史吗,这篇文章将带你深入了解JDK的发展史。 JDK(Java Development Kit)是Java开发者工具包,是用于编写Java程序和运行Java程序的软件开发工具集。自从1995年Java语言首次发布以来,JDK已经经历了数十年的发展…

内力网站建设深圳常平网站建设制作公司

哲哲是一位硬核游戏玩家。最近一款名叫《达诺达诺》的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切! 为简化模型,我们不妨假设游戏有 N 个剧情点,通过游戏里不同的操作或选择可以从某个剧情点去往另…

大丰网站建设公司鞍山网站制作开发

由于最近比较忙,所以本周搞了一个相对简单的验证码,就是抖音Tiktok的滑块验证码,这也是接到客户的一个需求。这种验证码通常在电脑端登录抖音、巨量引擎的的时候出现。 首先看一下最终的效果: 验证码识别过程 1、利用爬虫采集图…

网上做外贸都有哪些网站做网站要多少

主要是安装一些插件,c/c开发常用的插件有如下几个: 插件名称功能C/CC 和 C的编译环境C/C SnippetsC/C重用代码块C/C Advanced LintC/C静态检测Code Runner代码运行Include AutoComplete自动头文件包含Rainbow Brackets彩虹花括号,有助于阅读…

建设网站建设什么挣钱织梦技术网站模版

0.按照步骤,快速进行python的开发准备工作 1. Python解释器的下载 下载地址 https://www.python.org/ 选择对应你的系统的安装包 2.记得勾选这里将python加入你的路径中 3.有如下四个程序表明安装成功 4.点击上图中的第二个程序打开窗口检查解释器能否正常工作 输…

乌海做网站网站开发服务费入什么科目

我们知道C的类应当是先定义,然后使用。但在处理相对复杂的问题、考虑类的组合时,很可能遇到俩个类相互引用的情况,这种情况称为循环依赖。 例如: class A { public:void f(B b);//以B类对象b为形参的成员函数//这里编译错位&…

房建设计网站excel+表格+做的网站

k8s subPathExpr作用 场景: 对于一个deployment或者job拉起的服务,所有pod都是一样的配置,如果都挂载了宿主机的同一个目录,那么就会互相干扰,我们希望挂载相同目录,且在这个目录下,每个pod建立…

答题互动网页收藏

<!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"&…

常见问题解决 --- windows软件运行报错MSVCP140 ATOMIC WAIT.dI

常见问题解决 --- windows软件运行报错MSVCP140 ATOMIC WAIT.dI解决方法: https://aka.ms/vs/17/release/vc_redist.x64.exe 下载安装即可 其他参考: https://www.dll-files.com/msvcp140_atomic_wait.dll.htmlhttps…

芯脉:面向高速接口的SoC架构与完整性设计<3> - 教程

芯脉:面向高速接口的SoC架构与完整性设计<3> - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

spring boot实现MCP服务器,及其cursor测试利用的手段

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

vscode插件开发,打包后不生效问题解决

原因:使用AI生成的vscode 插件代码,打包使用的tsc,没有将三方依赖打包进去,导致安装插件后,插件无法激活,仅注册了快捷键 解决:对比使用 yo生成的ts+pnpm 插件项目,切换为esbuild打包 注意发布的话,使用 @vsco…