Как передать слоту при connect несколько параметров?

Есть какое-то окно со слайдером. В функцию надо передать два параметра, но окно закрывается с такой ошибкой:

TypeError: MainWindow.val() missing 1 required positional argument: 'param2'.

Пробовал делать через lambda, но не понял как.

Вот код

from PyQt5 import QtCore, QtWidgets
import sys

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(500, 500)
        self.horizontalSlider = QtWidgets.QSlider(self)
        self.horizontalSlider.setGeometry(50, 50, 400, 50)
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("Горизотальный слайдер")
        self.horizontalSlider.valueChanged.connect(self.val, self.horizontalSlider.value(), self.horizontalSlider.objectName())
    def val(self, param1, param2):
        print(param1, param2)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    ui = MainWindow()
    ui.show()
    app.exec_()

Заранее спасибо.


Ответы (1 шт):

Автор решения: S. Nick

void QAbstractSlider::valueChanged(int value)

Этот сигнал испускается при изменении значения ползунка с новым значением ползунка в качестве аргумента.

Примечание. Сигнал уведомления для значения свойства.

import sys
from PyQt5 import QtCore, QtWidgets


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(500, 500)
# !!! + vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv обязательно        
        self.centralWidget = QtWidgets.QWidget(self)
        self.centralWidget.setObjectName("centralWidget")
        self.setCentralWidget(self.centralWidget)
# !!! + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        
        
        self.horizontalSlider = QtWidgets.QSlider(self)
#        self.horizontalSlider.setGeometry(50, 50, 400, 50)
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("Горизотальный слайдер")
        self.horizontalSlider.valueChanged.connect(
#            self.val, self.horizontalSlider.value(), self.horizontalSlider.objectName()
            lambda value, obj=self.horizontalSlider.objectName(): 
                self.value_changed_slider(value, obj)
        )
        
        self.verticalSlider = QtWidgets.QSlider(orientation=QtCore.Qt.Vertical)
        self.verticalSlider.setObjectName("Vertical слайдер")
        self.verticalSlider.valueChanged.connect(
            lambda value, obj=self.verticalSlider.objectName(): 
                self.value_changed_slider(value, obj)
        )
        
        self.layout = QtWidgets.QHBoxLayout(self.centralWidget)
        self.layout.addWidget(self.verticalSlider)        
        self.layout.addWidget(self.horizontalSlider)

#    def value_changed_slider(self, param1, param2):
    def value_changed_slider(self, value, obj):
        print(value, obj)
        

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    ui = MainWindow()
    ui.show()
    app.exec_()

введите сюда описание изображения

→ Ссылка