【问题标题】:How to make QSlider unclickable如何使 QSlider 不可点击
【发布时间】:2018-10-10 14:58:51
【问题描述】:

我正在创建一个有几个滑块的 GUI。我希望每个 QSlider 只能被拖动。有时,如果我单击 QSlider 的任何部分,滑块的位置会发生变化。我怎样才能阻止这种情况发生?

【问题讨论】:

    标签: python pyqt pyqt5 qslider


    【解决方案1】:

    解决方法是验证当你没有用鼠标在滑块槽中按下时:

    from PyQt5 import QtCore, QtWidgets
    
    
    class SliderUnclickable(QtWidgets.QSlider):
        def mousePressEvent(self, event):
            opt = QtWidgets.QStyleOptionSlider()
            self.initStyleOption(opt)
            pressedControl = self.style().hitTestComplexControl(QtWidgets.QStyle.CC_Slider, opt, event.pos(), self)
            if pressedControl != QtWidgets.QStyle.SC_SliderGroove:
                super(SliderUnclickable, self).mousePressEvent(event)
    
    
    if __name__ == '__main__':
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
        w = QtWidgets.QWidget()
        flay = QtWidgets.QFormLayout(w)
        w1 = QtWidgets.QSlider(QtCore.Qt.Horizontal)
        w2 = SliderUnclickable(QtCore.Qt.Horizontal)
        flay.addRow("default QSlider: ", w1)
        flay.addRow("SliderUnclickable: ", w2)
        w.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 2019-03-12
      • 2022-10-24
      • 2017-08-06
      • 2019-08-04
      • 1970-01-01
      相关资源
      最近更新 更多