Как подключить два горизонтальных Qslider, где их максимальное и минимальное значения зависят от текущих значений друг друга для pyqt5 - PullRequest
0 голосов
/ 09 июля 2020
from PyQt5 import QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QSlider, QLabel, QListWidget
import sys
from PyQt5.QtCore import Qt
Это мои параметры для максимальных и минимальных значений горизонтального слайдера.
df_min = 0
df_max = 100

class Window(QWidget):
def __init__(self):
    super().__init__()
    self.title = 'urbs visualization'
    self.top = 300
    self.left = 500
    self.width = 800
    self.height = 600
    self.setWindowTitle(self.title)
    self.setGeometry(self.left, self.top, self.width, self.height)
    hbox = QHBoxLayout()

Я пытаюсь создать 2 горизонтальных ползунка, где, скажем, значение t_start было отрегулировано до 50. Новый минимум t_end для его диапазона будет t_start current value + 1 Аналогично для t_start, когда значение t_end станет 70, Я хочу, чтобы новый диапазон t _start стал 69 (t_end - 1). Мне удалось добиться этого с помощью ipywidgets на ноутбуке jupyter. Поскольку Qt-дизайнер для меня новичок, для меня это сложно.

    #parameters for time widgets
    #time horizontal slider
    self.t_start = QSlider()
    self.t_start.setOrientation(Qt.Horizontal)
    self.t_end = QSlider()
    self.t_end.setOrientation(Qt.Horizontal)
    #t_start constraints
    self.t_start.setRange(df_min, df_max - 1)
    self.t_start.valueChanged.connect(self.changedValue)
    self.label = QLabel(str(df_min))
    self.label.setFont(QtGui.QFont('Sanserif', 15))
    
    #t_end constraints
    self.t_end.setRange(df_min + 1, df_max)
    self.t_end.setSliderPosition(df_max)
    self.t_end.valueChanged.connect(self.changedValue_2)
    
    #testing constraints
    self.t_start.valueChanged().t_end.setRange(t_start.value() + 1, df_max)
    #self.t_end.rangeChanged(self.t_start.value(), df_max)
    self.label_2 = QLabel(str(df_max))
    self.label_2.setFont(QtGui.QFont('Sanserif', 15))
    
    #adding widgets
    hbox.addWidget(self.t_start)
    hbox.addWidget(self.label)
    hbox.addWidget(self.t_end)
    hbox.addWidget(self.label_2)
    self.setLayout(hbox)
    self.show()

def changedValue(self):
    size = self.t_start.value()
    self.label.setText(str(size))
def changedValue_2(self):
    size_2 = self.t_end.value()
    self.label_2.setText(str(size_2))

App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())

1 Ответ

0 голосов
/ 11 июля 2020

Вы можете установить значения диапазона ползунков, используя результат сигнала valueChanged (который не нужно вызывать value()), поскольку это аргумент сигнала.

Обратите внимание, что QLabel имеет удобную функцию для установки числовых c значений: setNum().

    def changedValue(self, size):
        self.label.setNum(size)
        self.t_end.setMinimum(size + 1)

    def changedValue_2(self, size):
        self.label_2.setNum(size)
        self.t_start.setMaximum(size - 1)

Имейте в виду, что даже если это не ваш случай, обратная установка таких свойств (диапазоны ползунков или счетчиков) может привести к рекурсии.

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