像这样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);
}
"""
)
# ...
关于python - 将样式表应用于升级的小部件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56538042/