调用SetWindowCompositionAttribute确实可以给窗口添加Win10的丙烯酸效果,但我还有一个问题没有解决,那就是如何在添加丙烯酸效果的同时实现圆形的窗口。如下图所示,即使我在pyqt中使用win32guiSetWindowRgn(int(self.winId()),win32gui.CreateRoundRectRgn(0, 0, 500, 500, 500, 500), True),丙烯酸面板也不能被裁剪。我能问一下你有什么好主意吗?

发布于 2020-08-17 15:58:54
SetWindowCompositionAttribute接口不是公共的。若要对一个图像或一组图像应用一个或多个高质量效果,可以使用Direct2D。
以下是一些有用的链接,可供您快速入门:
How to load an image into Direct2D effects using the FilePicker
如果你仍然想使用SetWindowCompositionAttribute应用程序接口,我建议你在Feedback Hub上提高你的声音。
发布于 2021-07-21 15:22:58
您可以使用边界半径来解决问题(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
https://stackoverflow.com/questions/63324480
复制相似问题