Размер шага Pyqt для списков с большим разрывом между средним и максимальным значением - PullRequest
1 голос
/ 15 мая 2019

Я создаю инструмент в pyqt, который имеет ползунок, который сортирует области geomtries. В некоторых случаях могут быть данные с чрезвычайно большим разрывом между средним или минимальным значением площади и максимумом.

Пусть будет так: areas = [0.5, 1.0, 1.3, 1.7, 2.6, 3.0, 3.5, 3.9, 4.0, 4.1, 1023.8, 3245.4, 3734.3]

Когда я устанавливаю минимальное и максимальное значения для ползунка, около 95% полосы ползунка составляют значения от 5 до 3245,4. Я ищу какое-то решение, чтобы сделать какой-то динамический размер шага для ползунка, чтобы увидеть все возможные значения из списка областей. Т.е. какой-то этот

0________________________________5.0____________________________________3734.3 ^ ^ ^

1 Ответ

1 голос
/ 15 мая 2019

Если у вас есть список значений и вы не хотите что-то вроде ползунка log , вы можете создать подкласс QSlider и обрабатывать значения на основе индексов в списке.

Быстрый пример:

class Slider(QSlider):
    doubleValueChanged = pyqtSignal(float)
    def __init__(self, values, parent=None):
        super().__init__(parent)
        self.values = values
        self.setOrientation(Qt.Horizontal)
        self.setRange(0, len(self.values) - 1)
        self.setTickInterval(1)
        self.valueChanged.connect(lambda index: self.doubleValueChanged.emit(self.values[index]))


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)

    slider = Slider([0.5, 1.0, 1.3, 1.7, 2.6, 3.0, 3.5, 3.9, 4.0, 4.1, 1023.8, 3245.4, 3734.3])
    slider.doubleValueChanged.connect( lambda value: print("New value", value))
    slider.show()
    sys.exit(app.exec_())

Я создал новый сигнал, потому что QSlider работает только с целыми числами.

Если вы хотите добавить метки, вы можете переопределить QSlider.paintEvent

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...