【问题标题】:QSlider Handle Size PyQt5 [duplicate]QSlider 手柄大小 PyQt5 [重复]
【发布时间】:2020-11-05 01:30:58
【问题描述】:

我正在尝试增加 Qslider 句柄的宽度,使其在小屏幕上对用户更友好,但我只在 C++ 中找到了这样做的方法。

我尝试使用以下代码在 python 中实现这一点,只是为了改变滑块的颜色:

    self.Zoom.setStyleSheet("""
             QSlider::handle:horizontal {
                                        height: 80px;
                                        }
            """)

关于如何正确使用 QWidget.setStyleSheet() 的任何建议。

【问题讨论】:

  • 看看这个Answer from @ekhumoro。看来您必须同时编辑手柄和凹槽才能使 StyleSheet 解决方案发挥作用。

标签: python pyqt pyqt5 qtstylesheets qslider


【解决方案1】:

一种可能的解决方案是使用 QProxyStyle:

from PyQt5 import QtCore, QtWidgets


class SliderProxyStyle(QtWidgets.QProxyStyle):
    def pixelMetric(self, metric, option, widget):
        if metric == QtWidgets.QStyle.PM_SliderThickness:
            return 40
        elif metric == QtWidgets.QStyle.PM_SliderLength:
            return 40
        return super().pixelMetric(metric, option, widget)


class TestWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)

        style = SliderProxyStyle(self.slider.style())
        self.slider.setStyle(style)

        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(self.slider)
        lay.addStretch()


if __name__ == "__main__":

    import sys

    app = QtWidgets.QApplication(sys.argv)
    app.setStyle("fusion")
    w = TestWindow()
    w.show()
    app.exec_()

之前

之后

【讨论】:

  • 清洁解决方案并立即工作。谢谢。
【解决方案2】:

一种可能的解决方案是使用 QSS:

from PyQt5 import QtCore, QtWidgets


class TestWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
        self.slider.setMinimumHeight(70)

        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(self.slider)
        lay.addStretch()


QSS = """
/* QSlider --------------------------------------  */
QSlider::groove:horizontal {
    border-radius: 1px;
    height: 3px;
    margin: 0px;
    background-color: rgb(52, 59, 72);
}
QSlider::groove:horizontal:hover {
    background-color: rgb(55, 62, 76);
}
QSlider::handle:horizontal {
    background-color: rgb(85, 170, 255);
    border: none;
    height: 40px;
    width: 40px;
    margin: -20px 0;
    border-radius: 20px;
    padding: -20px 0px;
}
QSlider::handle:horizontal:hover {
    background-color: rgb(155, 180, 255);
}
QSlider::handle:horizontal:pressed {
    background-color: rgb(65, 255, 195);
}
"""


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    app.setStyle("fusion")
    app.setStyleSheet(QSS)
    w = TestWindow()
    w.show()
    sys.exit(app.exec_())

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 2018-01-24
    • 2021-04-15
    相关资源
    最近更新 更多