调用SetWindowCompositionAttribute
确实可以给窗口添加Win10的亚克力效果,但是我有一个问题我还是解决不了,就是如何在添加亚克力效果的同时实现圆角窗口。如下图所示,即使我win32guiSetWindowRgn(int(self.winId()),win32gui.CreateRoundRectRgn(0, 0, 500, 500, 500, 500), True)
在pyqt中使用,亚克力面板也无法裁剪。请问大家有什么好的想法吗?
问问题
327 次
2 回答
0
SetWindowCompositionAttribute
API 不公开。要将一个或多个高质量效果应用于一个图像或一组图像,您可以使用 Direct2D。
以下是一些帮助您入门的链接:
如何使用 FilePicker 将图像加载到 Direct2D 效果中
如果您仍然想使用SetWindowCompositionAttribute
API,我建议您在反馈中心提出您的意见。
于 2020-08-17T07:58:53.977 回答
0
您可以使用边框半径来解决问题(UpdateLayeredWindow 相当于 WA_TranslucentBackground,SetWindowRgn 对 SetWindowCompositionAttribute 模糊没有影响)
完整代码:
Stylesheet = """
#Custom_Widget {
border-radius: 20px;
opacity: 100;
border: 8px solid #cdced4;
}
#closeButton {
min-width: 36px;
min-height: 36px;
border-radius: 10px;
}
#closeButton:hover {
color: #FFFFFF;
background: red;
}
"""
import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from BlurWindow.blurWindow import GlobalBlur
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setStyleSheet(Stylesheet)
self.setWindowFlag(Qt.FramelessWindowHint)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.resize(488, 388)
GlobalBlur(self.winId(),Acrylic=True,hexColor='#FFFFFF20')
self.Borders() #the real MainWindow
def Borders(self):
window = QMainWindow(self)
window.setAttribute(Qt.WA_TranslucentBackground)
window.setWindowFlag(Qt.FramelessWindowHint)
window.resize(500, 400)
self.widget = QWidget(window)
window.setCentralWidget(self.widget)
self.widget.setObjectName('Custom_Widget')
self.layout = QHBoxLayout(self.widget)
self.layout.addWidget(QPushButton(
'X', self,clicked=exit, objectName='closeButton'))
self.layout.addWidget(QLabel("<h2 style='color:blue;'>Blurry</h2>"))
window.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
UpdateLayeredWindow alpha 示例:https ://github.com/wxWidgets/Phoenix/issues/1544
于 2021-07-21T07:22:58.407 回答