Как сделать QSlider неуправляемым - PullRequest
0 голосов
/ 10 октября 2018

Я создаю графический интерфейс, где у меня есть несколько ползунков.Я хочу, чтобы каждый QSlider был таким, чтобы его можно было только перетаскивать.Иногда, если я нажимаю на любую часть QSlider, положение ползунка изменяется.Как я могу остановить это?

1 Ответ

0 голосов
/ 10 октября 2018

Решение состоит в том, чтобы убедиться, что когда вы не нажимаете мышью в канавке ползунка:

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_())
...