自定义QWidget的QSS样式

This commit is contained in:
Irony 2017-12-10 11:45:40 +08:00
parent 70f0ad10c5
commit e55e46b77c
7 changed files with 129 additions and 0 deletions

View file

@ -0,0 +1,34 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 2017年12月10日
@author: Irony."[讽刺]
@site: http://alyl.vip, http://orzorz.vip, https://coding.net/u/892768447, https://github.com/892768447
@email: 892768447@qq.com
@file: CustomPaintWidget
@description:
'''
from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QStyleOption, QStyle
__Author__ = "By: Irony.\"[讽刺]\nQQ: 892768447\nEmail: 892768447@qq.com"
__Copyright__ = "Copyright (c) 2017 Irony.\"[讽刺]"
__Version__ = "Version 1.0"
class CustomPaintWidget(QWidget):
def __init__(self, *args, **kwargs):
super(CustomPaintWidget, self).__init__(*args, **kwargs)
layout = QVBoxLayout(self)
layout.addWidget(QLabel("我是自定义CustomPaintWidget", self))
def paintEvent(self, event):
# 解决QSS问题
option = QStyleOption()
option.initFrom(self)
painter = QPainter(self)
self.style().drawPrimitive(QStyle.PE_Widget, option, painter, self)
super(CustomPaintWidget, self).paintEvent(event)

View file

@ -0,0 +1,25 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 2017年12月10日
@author: Irony."[讽刺]
@site: http://alyl.vip, http://orzorz.vip, https://coding.net/u/892768447, https://github.com/892768447
@email: 892768447@qq.com
@file: CustomWidget
@description:
'''
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel
__Author__ = "By: Irony.\"[讽刺]\nQQ: 892768447\nEmail: 892768447@qq.com"
__Copyright__ = "Copyright (c) 2017 Irony.\"[讽刺]"
__Version__ = "Version 1.0"
class CustomWidget(QWidget):
def __init__(self, *args, **kwargs):
super(CustomWidget, self).__init__(*args, **kwargs)
layout = QVBoxLayout(self)
layout.addWidget(QLabel("我是自定义CustomWidget", self))

View file

@ -0,0 +1,9 @@
# 自定QWidget 设置QSS样式
由于自定义QWidget 会导致QSS无效
这里通过两个方法来实现
1.重写paintEvent
2.设置Qt.WA_StyledBackground属性
# 截图
<img src="ScreenShot/1.png" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -0,0 +1,61 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 2017年12月10日
@author: Irony."[讽刺]
@site: http://alyl.vip, http://orzorz.vip, https://coding.net/u/892768447, https://github.com/892768447
@email: 892768447@qq.com
@file: test
@description:
'''
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QApplication, QHBoxLayout
from CustomPaintWidget import CustomPaintWidget # @UnresolvedImport
from CustomWidget import CustomWidget # @UnresolvedImport
__Author__ = "By: Irony.\"[讽刺]\nQQ: 892768447\nEmail: 892768447@qq.com"
__Copyright__ = "Copyright (c) 2017 Irony.\"[讽刺]"
__Version__ = "Version 1.0"
class TestWidget(QWidget):
def __init__(self, *args, **kwargs):
super(TestWidget, self).__init__(*args, **kwargs)
layout = QHBoxLayout(self)
layout.addWidget(CustomPaintWidget(self))
layout.addWidget(CustomWidget(self))
#注意
w = CustomWidget(self)
w.setAttribute(Qt.WA_StyledBackground)#很重要
layout.addWidget(w)
if __name__ == "__main__":
app = QApplication(sys.argv)
app.setStyleSheet('''
CustomPaintWidget {
min-width: 100px;
min-height: 100px;
border: 1px solid green;
border-radius: 20px;
background: green;
}
CustomWidget {
min-width: 200px;
min-height: 200px;
max-width: 200px;
max-height: 200px;
border: 1px solid orange;
border-radius: 100px;
background: orange;
}
''')
w = TestWidget()
w.show()
sys.exit(app.exec_())