Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QSlider手柄尺寸PyQt5 我试图增加QSLILE手柄的宽度,使它在小屏幕上更易于用户使用,但我在C++中只找到了这样做的方法。_Python_Pyqt_Pyqt5_Qtstylesheets_Qslider - Fatal编程技术网

Python QSlider手柄尺寸PyQt5 我试图增加QSLILE手柄的宽度,使它在小屏幕上更易于用户使用,但我在C++中只找到了这样做的方法。

Python QSlider手柄尺寸PyQt5 我试图增加QSLILE手柄的宽度,使它在小屏幕上更易于用户使用,但我在C++中只找到了这样做的方法。,python,pyqt,pyqt5,qtstylesheets,qslider,Python,Pyqt,Pyqt5,Qtstylesheets,Qslider,我尝试使用以下代码在python中实现这一点,只是为了更改滑块的颜色: self.Zoom.setStyleSheet(""" QSlider::handle:horizontal { height: 80px; } """

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

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

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

一个可能的解决方案是使用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_()
之前

之后


一种可能的解决方案是使用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_())

看看这个。似乎你必须编辑手柄和凹槽才能让样式表解决方案工作。清洁解决方案并立即工作。非常感谢。