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)