How to switch slider from one to one and increment or decrement slider using keyboard shortcut PyQT5?

Viewed 20

Hi I tried to implement shortcut key, It work only for one slider, so I want to create a method to switch from one slider to another using keyboard shortcut(not implemented) and the selected slider shall be able to increase or decrease using keyboard shortcut. Here is the code(dummy).

Here is the slider class.

import sys

from PyQt5 import QtGui
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class MySlider(QWidget):
    def __init__(self, name, maxi, mini, font_size, orientation,  parent=None):
        super(MySlider, self).__init__(parent)
        self.setMinimumSize(100, 200)                                          # +++
        self.update_shortcut()
#    def make_slider(self, name, posx, posy, maxi, mini, font_size, orientation):
#        """posx,posy,font_size,max,min = int orientation = Qt.Horizontal or Vertical,name = str name of slider"""
        self.parent =parent
        self.label = QLabel(name, self)
#        self.label.setGeometry(posx - 30, posy - 45, 100, 40)  # 210,60
        self.label.setFont(QtGui.QFont("Sanserif", font_size))
        self.slider = QSlider(self)
        self.slider.setOrientation(orientation)
        self.slider.setTickPosition(QSlider.TicksBelow)
        self.slider.setMaximum(maxi)
        self.slider.setMinimum(mini)
        self.slider.setTickInterval(1)
#        self.slider.move(posx, posy)
        self.label2 = QLabel(str(mini), self)
        self.label2.setFont(QtGui.QFont("Sanserif", font_size))
#        self.label2.setGeometry(posx, posy + 90, 50, 20)
        self.slider.valueChanged.connect(self.changed_value)
# ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv        
        self.layout = QVBoxLayout(self)
        self.layout.addWidget(self.label, alignment = Qt.AlignCenter)
        self.layout.addWidget(self.slider, alignment = Qt.AlignCenter)
        self.layout.addWidget(self.label2, alignment = Qt.AlignCenter)
        self.layout.addStretch()
        
# ++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    def changed_value(self, val):                                             # + val
        print(val)
#        wartosc = self.slider.value()
#        self.label2.setText(str(wartosc))
        self.label2.setNum(val)
    
    def update_shortcut(self):
        QShortcut(QKeySequence("CTRL+I"), self).activated.connect(self.increment_slider)
        QShortcut(QKeySequence("CTRL+D"), self).activated.connect(self.decrement_slider)


    def increment_slider(self):
        print("updated")
        self.slider.setValue(self.slider.value() + 10)

    def decrement_slider(self):
        self.slider.setValue(self.slider.value() - 10)

                                                       # + val

Here is the gui class.


class Window(QWidget):
#    """kreowanie klasy okna"""

    def __init__(self):
        super().__init__()
        self.setWindowTitle("Kalkulator liczby kombinacji")
#        self.setGeometry(100, 60, 750, 320)
        self.resize(750, 300)
        self.setWindowIcon(QtGui.QIcon("icon.png"))

        self.layout = QHBoxLayout(self)                                              # +++
        self.layout.addStretch()

        self.test_slider2 = MySlider("Liczba\nczegos", 6, 1, 12, Qt.Vertical, self)
#        self.test_slider2.make_slider(("   Liczba\n   czegos"), 140, 95, 6, 1, 12, Qt.Vertical)
        self.layout.addWidget(self.test_slider2)                                      # +++


        self.test_slider3 = MySlider("Liczba\nczegos",6, 1, 12, Qt.Vertical, self)
#        self.test_slider3.make_slider(("   Liczba\n   czegos"), 230, 95, 6, 1, 12, Qt.Vertical)
        self.layout.addWidget(self.test_slider3)                                      # +++

        self.test_slider4 = MySlider("Liczba\nczegos",6, 1, 12, Qt.Vertical, self)
#        self.test_slider4.make_slider(("   Liczba\n   czegos"), 320, 95, 6, 1, 12, Qt.Vertical)
        self.layout.addWidget(self.test_slider4)                                      # +++

        self.test_slider5 = MySlider("Liczba\nczegos",6, 1, 12, Qt.Vertical, self)
#        self.test_slider5.make_slider(("   Liczba\n   czegos"), 410, 95, 6, 1, 12, Qt.Vertical)
        self.layout.addWidget(self.test_slider5)                                      # +++

        self.bumping_slider = MySlider("Kołek\nbumpingowy", 10, 1, 12, Qt.Vertical, self)
#        self.bumping_slider.make_slider(("     Kołek\nbumpingowy"), 500, 95, 10, 1, 12, Qt.Vertical)
        self.layout.addWidget(self.bumping_slider)                                      # +++

        self.column_slider = MySlider("Liczba\nkolumn", 6, 1, 12, Qt.Vertical, self)
#        self.column_slider.make_slider(("   Liczba\n   kolumn"), 590, 95, 6, 1, 12, Qt.Vertical)
        self.layout.addWidget(self.column_slider)                                      # +++

        self.test_slider = MySlider("Liczba\nczegos", 6, 1, 12, Qt.Vertical, self)
#        self.test_slider.make_slider(("   Liczba\n   czegos"), 680, 95, 6, 1, 12, Qt.Vertical)
        self.layout.addWidget(self.test_slider)                                      # +++

        self.layout.addStretch()


if __name__ == '__main__': 
    app = QApplication(sys.argv)
    app.setStyle("Fusion")``
    window = Window()
    window.show()
    sys.exit(app.exec())

Any leads or help will be appreciated.

0 Answers
Related