5

を使用して QSpinBox で可能なように、QSlider がスライドできるステップを指定したいと思いますsetSingleStep。QAbstractSlider の setSingleStep を使ってみたのですが、効果がないようです。

何か案は?

4

2 に答える 2

8

tickIntervalを設定してみてください

編集

tickInterval については申し訳ありませんが、あまり考えていませんでしたが、この作業コードがあり、setSingleStepを使用して必要なことを行います

import sys
from PyQt4.QtGui import QApplication, QSlider, QMainWindow

class Window(QMainWindow):
    def __init__(self, parent = None):
        super(Window, self).__init__(parent)

        slider = QSlider()
        slider.setMinimum(0)
        slider.setMaximum(100)

        slider.setTickInterval(20)
        slider.setSingleStep(20)


        self.setCentralWidget(slider)


if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())
于 2011-01-28T12:31:40.587 に答える
1

QSlider クラスを拡張して、ユーザーがステップ間でスライダーを追跡できないように制限しました。このメソッドはとメソッドSetIntervalを組み合わせたものと同じですが、目盛り値の間にあるスライダーも停止します。setTickIntervalsetSingleStep

このクラスでは、float 値をスライダーの制限または間隔として使用したり、スライダーで選択したポイントのインデックスを設定して読み取ったりすることもできます。

class DoubleSlider(qw.QSlider):

    def __init__(self, *args, **kargs):
        super(DoubleSlider, self).__init__( *args, **kargs)
        self._min = 0
        self._max = 99
        self.interval = 1

    def setValue(self, value):
        index = round((value - self._min) / self.interval)
        return super(DoubleSlider, self).setValue(index)

    def value(self):
        return self.index * self.interval + self._min

    @property
    def index(self):
        return super(DoubleSlider, self).value()

    def setIndex(self, index):
        return super(DoubleSlider, self).setValue(index)

    def setMinimum(self, value):
        self._min = value
        self._range_adjusted()

    def setMaximum(self, value):
        self._max = value
        self._range_adjusted()

    def setInterval(self, value):
        # To avoid division by zero
        if not value:
            raise ValueError('Interval of zero specified')
        self.interval = value
        self._range_adjusted()

    def _range_adjusted(self):
        number_of_steps = int((self._max - self._min) / self.interval)
        super(DoubleSlider, self).setMaximum(number_of_steps)
于 2020-04-26T10:20:03.760 に答える