python - 将样式表应用于提升的小部件
问题描述
在像这个SO Link中的答案一样推广我的小部件后,建议我在这个特定的小部件上应用我的样式表时遇到问题。请使用@eyllanesc 提供的答案作为工作代码。
我读过类似的问题,其中一些建议在paintEvent中处理这个问题?
我尝试在 Mainform 类和 UiLoader 类中应用此样式表,并使用 self.setStyleSheet 切换 widget.setStyleSheet 并将其放入paintEvent。我也尝试过在 QWidget 之前不使用点并用 QObject 切换 QWidget。这些尝试似乎都不起作用。
widget.setStyleSheet("""
.QWidget{
border: 1px solid grey;
border-radius: 2px;
background-color: rgb(255, 255, 255);
}
""")
样式表在 Designer 中工作,但在我运行程序时未应用样式表。
解决方案
如果您希望小部件支持 QSS,则必须使用 QStyle 进行绘画,因为它在内部使用 QSS:
class Drawer(QtWidgets.QWidget):
def paintEvent(self, event):
opt = QtWidgets.QStyleOption()
opt.init(self)
qp = QtGui.QPainter(self)
self.style().drawPrimitive(QtWidgets.QStyle.PE_Widget, opt, qp, self)
self.drawGeometry(qp)
qp.end()
def drawGeometry(self, qp):
qp.setPen(QtGui.QPen(QtCore.Qt.green, 8, QtCore.Qt.DashLine))
qp.drawEllipse(40, 40, 400, 400)
您还必须使用以下 QSS:
# ...
loader = UiLoader()
self.ui_window = loader.load(ui_file)
ui_file.close()
self.ui_window.show()
self.ui_window.widget.setStyleSheet(
"""
QWidget{
border: 1px solid grey;
border-radius: 2px;
background-color: rgb(255, 255, 255);
}
"""
)
# ...
推荐阅读
- phpstorm - PhpStorm,有没有办法为类的所有方法添加断点?
- javascript - 我如何只允许从日期选择器中选择从今天开始最多一年的时间?
- python - 如何将变量值插入 JSON 字符串以与 PDAL 一起使用
- excel - 在excel中查找匹配通配符的索引
- react-native - 应用程序直接崩溃而不是显示红色警报
- c# - C# SMTP MailMessage 接收错误“5.7.57 SMTP;客户端未经过身份验证以在 MAIL FROM 期间发送匿名邮件”
- powershell - 强制执行备份保留策略的脚本
- json - 为什么此字符串在 PowerShell 中不序列化为简单的 JSON 字符串
- python - 关于仅在矩阵中打印某些值的问题
- ios - 水平 UIScrollView 未居中当前页面