PySide6和PyQt5的show()不仅仅是展示这么简单

看一段代码:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QFrameclass MainWindow(QMainWindow):def __init__(self):super().__init__()# 创建主窗口self.setWindowTitle("Main Window")self.setGeometry(100, 100, 800, 600)  # 设置窗口位置和大小# 创建 QFrameself.frame = QFrame(self)self.frame.setGeometry(50, 50, 200, 200)  # 设置 QFrame 在 QMainWindow 中的位置和大小# 设置 QFrame 的背景色self.frame.setStyleSheet("background-color: #00007f;")if __name__ == "__main__":app = QApplication(sys.argv)window1 = MainWindow()window1.show()sys.exit(app.exec())

 这是一段很典型的代码,在一个画面中放置一个QFrame,并将其背景色设置为#00007f。

进一步的需求是需要获取window1.frame的背景颜色,使用下面的代码,就可以获取背景色:

p1 = window1.frame.palette()  # 获取部件的调色板
background_color1 = p1.color(p1.ColorRole.Window)  # 从部件的调色板获取背景颜色
print('背景色:', background_color1.name())

 完整代码如下:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QFrameclass MainWindow(QMainWindow):def __init__(self):super().__init__()# 创建主窗口self.setWindowTitle("Main Window")self.setGeometry(100, 100, 800, 600)  # 设置窗口位置和大小# 创建 QFrameself.frame = QFrame(self)self.frame.setGeometry(50, 50, 200, 200)  # 设置 QFrame 在 QMainWindow 中的位置和大小# 设置 QFrame 的背景色self.frame.setStyleSheet("background-color: #00007f;")if __name__ == "__main__":app = QApplication(sys.argv)window1 = MainWindow()p1 = window1.frame.palette()  # 获取部件的调色板background_color1 = p1.color(p1.ColorRole.Window)  # 从部件的调色板获取背景颜色print('背景色:', background_color1.name())window1.show()sys.exit(app.exec())

运行结果:

C:\Users\DY\AppData\Local\Programs\Python\Python38\python.exe E:\pyside模板\pys\tmp2.py 
背景色: #f0f0f0进程已结束,退出代码0

 可以看到,成功获取了window1.frame的背景颜色,但是并没有输出预设的#00007f,而是输出了一个QFrame的默认预置色#f0f0f0。

这个问题困扰了我一整天。。。我用了十几个小时查资料和做实验才解决了问题。

方法是:将获取背景色的语句放在show()语句之后。按照我的理解,window1 = MainWindow()

这一句就已经把window1的所有部件进行初始化和赋值了,show()语句仅仅是显示出来,然而并不是,show()语句执行的操作远比想象中多。

下面是修改后的代码:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QFrame
#
#
class MainWindow(QMainWindow):def __init__(self):super().__init__()# 创建主窗口self.setWindowTitle("Main Window")self.setGeometry(100, 100, 800, 600)  # 设置窗口位置和大小# 创建 QFrameself.frame = QFrame(self)self.frame.setGeometry(50, 50, 200, 200)  # 设置 QFrame 在 QMainWindow 中的位置和大小# 设置 QFrame 的背景色self.frame.setStyleSheet("background-color: #00007f;")if __name__ == "__main__":app = QApplication(sys.argv)window1 = MainWindow()p1 = window1.frame.palette()  # 获取部件的调色板background_color1 = p1.color(p1.ColorRole.Window)  # 从部件的调色板获取背景颜色print('show()之前的背景色:', background_color1.name())window1.show()  # 画面的展示p2 = window1.frame.palette()  # 获取部件的调色板background_color2 = p2.color(p2.ColorRole.Window)  # 从部件的调色板获取背景颜色print('show()之后的背景色:', background_color2.name())sys.exit(app.exec())

 运行结果:

C:\Users\DY\AppData\Local\Programs\Python\Python38\python.exe E:\pyside模板\pys\tmp2.py 
show()之前的背景色: #f0f0f0
show()之后的背景色: #00007f进程已结束,退出代码0

 

测试PyQt5,运行结果相同。

写出来,大家不要再踩坑。

 

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

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

相关文章

使用Java中的Condition+ ReentrantLock进行高效地协调线程

Condition 是 Java 中用于更细粒度的线程同步控制的一个接口,与传统的内置锁监视器方法(wait(), notify(), notifyAll())相比,它提供了更高级的功能,允许更加灵活的线程管理。它通常与显式锁(如 ReentrantL…

使用simulink进行汽车软件建模的经验介绍

使用Simulink进行汽车软件建模的经验介绍可以从多个方面进行阐述。首先,Simulink提供了一个强大的平台,支持车辆模型的搭建和仿真,包括但不限于商用车整车模型、自动驾驶仿真框架的构建。这表明Simulink能够满足不同自动驾驶开发任务的需求,通过选择不同的车辆、传感器模型…

Redis入门到通关之Hash命令

文章目录 ⛄介绍⛄命令⛄RedisTemplate API❄️❄️添加缓存❄️❄️设置过期时间(单独设置)❄️❄️添加一个Map集合❄️❄️提取所有的小key❄️❄️提取所有的value值❄️❄️根据key提取value值❄️❄️获取所有的键值对集合❄️❄️删除❄️❄️判断Hash中是否含有该值 ⛄…

阐述嵌入式系统的基本组成:硬件层、驱动层、操作系统层和应用层

大家好,今天给大家介绍阐述嵌入式系统的基本组成:硬件层、驱动层、操作系统层和应用层,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 嵌入式系统是一种能…

Java集合(一)--Map(2)

ConcurrentHashMap与HashTable 底层实现 在JDK1.7时,底层采用的是分段数组+链表的形式,在JDK1.8之后,采用的是与HashMap相同的形式,数组链表/红黑树。而HashTable采用的是数组链表的形式。 如何实现线程安全 Concu…

DeblurGANv2-master文件组成

DeblurGANv2-master文件夹 **Config:**config.yaml是项目的配置文件:包括训练集的路径设置,验证集路径设置,对数据集内图片的处理,数据集增强等;backbone的选择,backbone冻结的轮数;…

如何访问远程服务器?

在现代技术时代,随着信息化的快速发展,远程访问服务器已经成为了不可或缺的一种需求。无论是企业还是个人用户,都需要通过远程访问来管理、传输和获取数据。本文将介绍一种名为【天联】的工具,它能够通过私有通道进行远程服务器访…

vscode配置c\c++及美化

文章目录 vscode配置c\c及美化1.安装vscode2.汉化3.安装c\c插件4.安装mingw5.配置mingw6. 运行c代码6.1 创建代码目录6.2 设置文件配置6.3 创建可执行任务:task.json6.4 编译执行6.5 再写其他代码6.6 运行多个c文件 7. 运行c文件8.调式代码8.1 创建launch.json8.2 修…

【排序 贪心】3107. 使数组中位数等于 K 的最少操作数

算法可以发掘本质,如: 一,若干师傅和徒弟互有好感,有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二,有无限多1X2和2X1的骨牌,某个棋盘若干格子坏了,如何在没有坏…

Springboot+Vue项目-基于Java+MySQL的母婴商城系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

TPS2041A 至 TPS2044A 、TPS2051A 至 TPS2054A

这份文件是德州仪器(Texas Instruments)关于一系列电流限制型电源分配开关的数据手册,型号包括 TPS2041A 至 TPS2044A 和 TPS2051A 至 TPS2054A。这些开关适用于可能遇到重负载电容负载和短路的应用程序。以下是该数据手册的核心内容概要&…

常用组合逻辑电路模块(5):加法器

半加器和全加器 半加器 半加:只考虑两个加数本身,不考虑低位进位的加法运算。实现半加运算的逻辑电路称为半加器。 其对应真值表为: 由真值表可得逻辑表达式: 逻辑电路和框图如下: 其中,CO为进位输出端&…

家庭网络防御系统搭建-siem之security onion 安装配置过程详解

本文介绍一下security onion的安装流程,将使用该工具集中管理终端EDR和网络NDR sensor产生的日志。 充当SIEM的平台有很多,比如可以直接使用原生的elastic以及splunk等,security onion的优势在于该平台能够方便的集成网络侧(比如…

Linux 硬链接和软链接怎么区分使用?

一、什么是硬链接和软链接 硬链接 在Linux操作系统中,硬链接相当于存储在硬盘驱动器中的文件,它实际上引用或指向硬盘驱动器上的某个点。硬链接是原始文件的镜像副本。 硬链接与软链接的区别在于,删除原始文件不会影响硬链接,但…

网站如何一定程度上防止ddos和压力测试

1.通过nginx对并发数进行限制 防止压力测试的恶意攻击的思路:nginx限制同一个IP的并发最大为10,vi /usr/local/nginx/conf/nginx.conf在http{} 字段第一行添加:limit_conn_zone $binary_remote_addr zoneone:10m; 在对应的server{}里添加&a…

AI图书推荐:如何在课堂上使用ChatGPT 进行教育

ChatGPT是一款强大的新型人工智能,已向公众免费开放。现在,各级别的教师、教授和指导员都能利用这款革命性新技术的力量来提升教育体验。 本书提供了一个易于理解的ChatGPT解释,并且更重要的是,详述了如何在课堂上以多种不同方式…

【攻防世界】supersqli(堆叠注入)

进入题目环境,有输入框与注入参数,推测类型为SQL注入: 测试--注入类型为数字型还是字符型,构造payload:?inject1 or 12 并提交: 发现页面依然正常,说明注入类型为字符型,则继续检查…

ML在骨科手术术前、书中、术后方法应用综述【含数据集】

达芬奇V手术机器人 近年来,人工智能(AI)彻底改变了人们的生活。人工智能早就在外科领域取得了突破性进展。然而,人工智能在骨科中的应用研究尚处于探索阶段。 本文综述了近年来深度学习和机器学习应用于骨科图像检测的最新成果,描述了其贡献、优势和不足。以及未来每项研究…

Python数据库编程实战:sqlite3模块详解

Python数据库编程实战:sqlite3模块详解 在Python中,数据库编程是一项重要且实用的技能。通过数据库,我们可以高效地存储、检索和管理大量数据。Python提供了多种数据库编程接口,其中sqlite3模块是一个轻量级的关系型数据库引擎&a…

用AI提升儿童英语口语:和小猪佩奇对话

小孩子大部分都是喜欢动画片的,如果能让动画片中的角色和他们进行口语对话,应该可以极大的激发他们英语学习兴趣。 下面,以小猪佩奇为例来说明如何利用AI来创建一个虚拟的英语口语陪练小猪佩奇角色。 在kimichat对话框中键入提示词&#xf…