[pyar] pyqt conexión con funciones importadas (Facundo Batista)

Cristhian Martin cristhian en linuxar.com
Jue Oct 3 07:28:19 -03 2019


Buenos días gente, despues de mucho darle vuelta al lambda y siempre obtener 
los mismo resultados al final a mi problema lo solucione con functools.partial y 
quedo de la siguiente manera


> En general para solucionar este "problema" (bastante frecuente) es
> hacer que "funcion" resuelva a algo que se guardó en la función que
> armaste con lambda al momento de armarla. O sea, reemplazá esa linea
> por algo como:
> 
>     boton.clicked.connect(lambda funcion=funcion: funcion(self.ui))
> 
> Y contanos.


def crear_menu(self, modulos):   for nombre in modulos:      self.ui.page = 
QtWidgets.QWidget()      self.ui.page.setObjectName(nombre)      
self.ui.toolBox.addItem(self.ui.page, nombre)      self.ui.verticalLayout = 
QtWidgets.QVBoxLayout(self.ui.page)      
self.ui.verticalLayout.setObjectName("layout_"+ nombre)      self.ui.scrollArea = 
QtWidgets.QScrollArea(self.ui.page)      
self.ui.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame)      
self.ui.scrollArea.setLineWidth(1)      self.ui.scrollArea.setWidgetResizable(True)      
self.ui.scrollArea.setObjectName("scrollArea_" + nombre)      estructura, 
submodulos = contar_modulos(join('Modulos', nombre))      for submodulo in 
submodulos:         if submodulo[0:1] != '.':            path = join('.','Modulos', 
nombre, submodulo)            f = open(join(path, 'cfg'), 'r')            cfg = f.readline()            
f.close()            cfg = cfg.split(',')            boton = QtWidgets.QPushButton()            
icono = QtGui.QIcon()            icono.addFile(join(path, 'icono.png'), 
QtCore.QSize(32, 32), QtGui.QIcon.Normal, QtGui.QIcon.Off)            
boton.setIcon(icono)            boton.setIconSize(QtCore.QSize(32, 32))            
boton.setObjectName(cfg[0])            boton.setFlat(True)            
boton.setWhatsThis(cfg[2])            boton.setText(cfg[1])

*            modulo = importlib.import_module(cfg[**4].replace('\n', ''))            
ejecutar = getattr(modulo, cfg[5].replace('\n', ''))            
boton.clicked.connect(partial(ejecutar, self.ui))*
self.ui.verticalLayout.addWidget(boton)      spacerItem = 
QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, 
QtWidgets.QSizePolicy.Expanding)      self.ui.verticalLayout.addItem(spacerItem)



Muchas gracias por la ayuda que me brindaron.

Saludos

*Cristhian M.*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20191003/f0abb578/attachment-0001.html>


Más información sobre la lista de distribución pyar