python python-3.x pyqt pyqt5 qt-signals

python - Pasar argumentos adicionales a través de Connect



python-3.x pyqt (1)

El problema se puede resolver de 2 maneras:

Usando funciones lambda:

En general:

obj.signal.connect(lambda param1, param2, ..., arg1=val1, arg2= value2, ... : fun(param1, param2,... , arg1, arg2, ....)) def fun(param1, param2,... , arg1, arg2, ....): [...]

dónde:

  • param1, param2, ...: son los parámetros enviados por la señal
  • arg1, arg2, ...: son los parámetros adicionales que desea gastar

En tu caso:

self.buttonGroup.buttonClicked[''int''].connect(lambda i: self.input(i, "text")) @pyqtSlot(int) def input(self, button_or_id, DiffP): if isinstance(button_or_id, int): if button_or_id == 0: self.TotalInput[0].setText(DiffP) elif button_or_id == 1: self.TotalInput[54].setText(''1'')

Usando functools.partial :

En general:

obj.signal.connect(partial(fun, args1, arg2, ... )) def fun(arg1, arg2, ..., param1, param2, ...): [...]

dónde:

  • param1, param2, ...: son los parámetros enviados por la señal
  • arg1, arg2, ...: son los parámetros adicionales que desea gastar

En tu caso:

from functools import partial [...] self.buttonGroup.buttonClicked[''int''].connect(partial(self.input, "text")) @pyqtSlot(int) def input(self, DiffP, button_or_id): if isinstance(button_or_id, int): if button_or_id == 0: self.TotalInput[0].setText(DiffP) elif button_or_id == 1: self.TotalInput[54].setText(''1'')

¿Es posible pasar variables a través de las ranuras para que pueda imprimir cierto texto? Intentando pasar la variable ''DiffP'' que se define en otra función al slot.

''DiffP'' cambia según el archivo seleccionado.

def addLineEdit(self): try: self.clearLayout() self.FileButton ={} self.Input = {} self.TotalInput = [] for i in range(int(self.numberLine.text())): self.FileButton[i] = QtWidgets.QPushButton(self.centralwidget) self.FileButton[i].setText(''Case {}''.format(i+1)) self.FileButton[i].setFlat(True) self.FileButton[i].setMaximumSize(QtCore.QSize(50, 50)) self.hboxlayout[0].addWidget(self.FileButton[i]) self.FileButton[i].clicked.connect(lambda i=i: self.openfile(i)) self.buttonGroup.addButton(self.FileButton[i],i) self.buttonGroup.buttonClicked[''int''].connect(self.input) def searchfile(self,dir): with open(dir) as f: content = f.readlines() MainList = content[44].split() RPM = round(float(MainList[0]), 2) Ps = round(float(MainList[1]), 2) Ts = round(float(MainList[2]), 2) Pd = round(float(MainList[3]), 2) Ratio = round(Pd / Ps, 2) DiffP = round(Pd - Ps, 2) @pyqtSlot(int) def input(self,button_or_id,DiffP): if isinstance(button_or_id, int): if button_or_id == 0: self.TotalInput[0].setText(str(DiffP)) elif button_or_id == 1: self.TotalInput[54].setText(''1'') def openfile(self,i): filename = QtWidgets.QFileDialog.getOpenFileName(self, ''Choose file'') dir = filename[0] directory = os.path.split(dir)[0] return self.searchfile(dir)