[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