Как передать слоту при 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_()
