class HAdjustmentBar(QWidget): valueChanged = pyqtSignal(int) def __init__(self, parent=None): super(HAdjustmentBar, self).__init__(parent) self.value = 50 self.step = 1 self.hi_value = 100 self.low_value = 50 self.timer_value = 100 self.texttemplate = 'Value = %s' self.timer = QBasicTimer() self.showToggleButton = True self.showSettingMenu = True self.bar = LabeledBar() #self.bar.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) # black magic class patching # so calling these functions actually calls the self.bar's functions. self.minimum = self.bar.minimum self.maximum = self.bar.maximum def buildWidget(self): layout = QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) SettingMenu = QMenu() exitButton = QAction(QIcon('exit24.png'), 'Set As High', self) exitButton.triggered.connect(self.setHigh) SettingMenu.addAction(exitButton) setlowButton = QAction(QIcon('exit24.png'), 'Set As Low', self) setlowButton.triggered.connect(self.setLow) SettingMenu.addAction(setlowButton) self.tb_down = QToolButton() self.tb_down.pressed.connect(self.on_click_down) self.tb_down.released.connect(self.on_released) self.tb_down.setArrowType(Qt.LeftArrow) self.tb_up = QToolButton() self.tb_up.pressed.connect(self.on_click_up) self.tb_up.released.connect(self.on_released) self.tb_up.setArrowType(Qt.RightArrow) if self.showToggleButton: tb_set = QToolButton() tb_set.clicked.connect(self.on_click_set_value) tb_set.setText('<>') if self.showSettingMenu: tb_set.setMenu(SettingMenu) tb_set.setPopupMode(QToolButton.DelayedPopup) layout.addWidget(self.tb_down) layout.addWidget(self.bar) layout.addWidget(self.tb_up) if self.showToggleButton: layout.addWidget(tb_set) layout.setSpacing(0) def on_click_up(self): self.timer.start(self.timer_value, self) self.value += self.step self._setValue() def on_click_down(self): self.timer.start(self.timer_value, self) self.value -= self.step self._setValue() def on_released(self): self.timer.stop() def on_click_set_value(self): if self.value == self.hi_value: self.value = self.low_value else: self.value = self.hi_value self._setValue() def timerEvent(self, e): if self.value < self.maximum() and self.value > self.minimum(): if self.tb_down.isDown(): self.value -= self.step else: self.value += self.step self._setValue() else: self.timer.stop() def _setValue(self): if self.value < self.minimum(): self.value = self.minimum() if self.value > self.maximum(): self.value = self.maximum() self.valueChanged.emit(self.value) def setValue(self, value): if value < self.minimum(): value = self.minimum() if value > self.maximum(): value = self.maximum() self.value = int(value) tmpl = lambda s: self.texttemplate % s try: self.bar.text = tmpl(int(value)) except: self.bar.text = self.texttemplate self.bar.setValue(int(value)) self.bar.update() def setHigh(self): self.hi_value = self.value def setLow(self): self.low_value = self.value def setMaximum(self, data): if data < self.hi_value: self.hi_value = data self.bar.setMaximum(data) def setMinimum(self, data): if data > self.low_value: self.low_value = data self.bar.setMinimum(data) def setStep(self, data): self.step = data
class HAdjustmentBar(QWidget): valueChanged = pyqtSignal(int) def __init__(self, parent=None): super(HAdjustmentBar, self).__init__(parent) self.value = 50 self.step = 1 self.hi_value = 100 self.low_value = 50 self.timer_value = 25 self.texttemplate = 'Value = %s' self.timer = QBasicTimer() self.showToggleButton = True self.showSettingMenu = True self.bar = LabeledBar() #self.bar.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) # black magic class patching # so calling these functions actually calls the self.bar's functions. self.minimum = self.bar.minimum self.maximum = self.bar.maximum def buildWidget(self): layout = QHBoxLayout(self) layout.setContentsMargins(0,0,0,0) SettingMenu = QMenu() exitButton = QAction(QIcon('exit24.png'), 'Set As High', self) exitButton.triggered.connect(self.setHigh) SettingMenu.addAction(exitButton) setlowButton = QAction(QIcon('exit24.png'), 'Set As Low', self) setlowButton.triggered.connect(self.setLow) SettingMenu.addAction(setlowButton) self.tb_down = QToolButton() self.tb_down.pressed.connect(self.on_click_down) self.tb_down.released.connect(self.on_released) self.tb_down.setArrowType(Qt.LeftArrow) self.tb_up = QToolButton() self.tb_up.pressed.connect(self.on_click_up) self.tb_up.released.connect(self.on_released) self.tb_up.setArrowType(Qt.RightArrow) if self.showToggleButton: tb_set = QToolButton() tb_set.clicked.connect(self.on_click_set_value) tb_set.setText('<>') if self.showSettingMenu: tb_set.setMenu(SettingMenu) tb_set.setPopupMode(QToolButton.DelayedPopup) layout.addWidget(self.tb_down) layout.addWidget(self.bar) layout.addWidget(self.tb_up) if self.showToggleButton: layout.addWidget(tb_set) layout.setSpacing(0) def on_click_up(self): self.timer.start(self.timer_value, self) self.value += self.step self._setValue() def on_click_down(self): self.timer.start(self.timer_value, self) self.value -= self.step self._setValue() def on_released(self): self.timer.stop() def on_click_set_value(self): if self.value == self.hi_value: self.value = self.low_value else: self.value = self.hi_value self._setValue() def timerEvent(self, e): if self.value < self.maximum() and self.value > self.minimum(): if self.tb_down.isDown(): self.value -= self.step else: self.value += self.step self._setValue() else: self.timer.stop() def _setValue(self): if self.value < self.minimum():self. value = self.minimum() if self.value > self.maximum(): self.value = self.maximum() self.valueChanged.emit(self.value) def setValue(self, value): if value < self.minimum(): value = self.minimum() if value > self.maximum(): value = self.maximum() self.value = int(value) tmpl = lambda s: self.texttemplate % s try: self.bar.text = tmpl(int(value)) except: self.bar.text = self.texttemplate self.bar.setValue(int(value)) self.bar.update() def setHigh(self): self.hi_value = self.value def setLow(self): self.low_value = self.value def setMaximum(self, data): if data < self.hi_value: self.hi_value = data self.bar.setMaximum(data) def setMinimum(self, data): if data > self.low_value: self.low_value = data self.bar.setMinimum(data)