Qt窗体设置Qt::WA_TranslucentBackground为全黑的原因

介绍在Qt 4.5版本之后如何通过设置窗口属性实现透明效果,并解决顶层窗口标题栏导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.5版本发行以后,可以设置窗口属性Qt::WA_TranslucentBackground来设定该窗口透明显示,但是有一个问题,就是如果该窗口是个top level窗口,就会有标题栏(title bar), 在windows平台下,如果不把这个标题栏去掉(设置Qt::FramelessWindowHint 标志位就会去掉标题栏),那么将不会是透明效果,而是背景为全黑(我的实验结果是这样)
您的代码存在一个错误,即 `__int__` 函数应该是 `__init__` 函数,因此 `LoginWindow` 类的初始化函数没有被调用。这可能是导致窗口未显示的原因之一。 此外,您还需要将 `if __name__ != '__main__':` 的代码块移动到代码的最底部,以确保当脚本作为主程序运行时可以正确显示窗口。 以下是更新后的代码示例: ```python from LoginUI import * from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5 import QtCore, QtWidgets import sys class LoginWindow(QMainWindow): def __init__(self): super().__init__() self.ui = Ui_loginWindow() self.ui.setupUi(self) self.setWindowFlag(QtCore.Qt.FramelessWindowHint) self.setAttribute(QtCore.Qt.WA_TranslucentBackground) self.shadow = QtWidgets.QGraphicsDropShadowEffect(self) self.shadow.setOffset(0, 0) self.shadow.setBlurRadius(15) self.shadow.setColor(QtCore.Qt.black) self.ui.frame.setGraphicsEffect(self.shadow) self.ui.pushButton_Login.clicked.connect(lambda: self.ui.stackedWidget_2.setCurrentIndex(0)) self.ui.pushButton_Register.clicked.connect(lambda: self.ui.stackedWidget_2.setCurrentIndex(1)) self.show() if __name__ == '__main__': app = QApplication(sys.argv) win = LoginWindow() win.show() sys.exit(app.exec_()) ``` 请注意,此代码假定 `LoginUI.py` 包含名为 `Ui_loginWindow` 的类,该类是使用 Qt Designer 创建的窗口类,并使用 `pyuic5` 工具生成的 Python 代码。如果您在 `LoginUI.py` 文件中使用了不同的类名,请将 `Ui_loginWindow` 替换为您的类名。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值