[pyar] duda de pyqt4, abriendo nuevas ventanas

Matias Graña matias.alejo en gmail.com
Lun Nov 29 09:39:43 ART 2010


2010/11/29 Roberto Alsina <ralsina en netmanagers.com.ar>:
> On Monday 29 November 2010 01:51:16 Matias Graña wrote:

>> class Foo(QtGui.QMainWindow):
>>     def __init__(self, parent=None):
>>         QtGui.QWidget.__init__(self, parent)
>
> Foo hereda QMainWindow pero estás inicializando con QWidget. Mala idea.
>
>>         self.mw = Ui_MainWindow()
>>         self.mw.setupUi(self)
>
> No tengo idea de porqué hacés esas dos líneas en vez de
> self.setObjectName("MainWindow")

Casi seguro, lo hago por error. Estoy usando qt-designer, que genera
un bar.ui, que yo traduzco a bar.py con pyuic4. No quiero tocar
bar.py, porque va a chocar con un uso posterior de qt-designer.
Entonces importo el bar.py desde mi main.py. La clase Ui_MainWindow
está definida en bar.py; yo tomé de ahí lo mínimo indispensable para
que entrara en mi ejemplito, y limpié todo el código innecesario.
Hay alguna manera más limpia para hacer esto?

>>     def abrir_pagina(self):
>>         web = QtWebKit.QWebView()
>>         web.load(QtCore.QUrl('http://google.com.ar'))
>>         web.show()
>
> No estás guardando una referencia a web en ningún lado. Terminás la función y
> el garbage collector se la lleva y desaparece antes de que entres de vuelta en
> el event loop (que es cuando show() tendría efecto). Así que cambio web por
> self.web.

Con esto funciona tal cual quiero. Muchísimas gracias! Y también
muchísimas gracias por la explicación. Ahora me entra la duda: con la
excepción funcionaba porque volvía al main loop antes de que el GC
molestara? O porque el Traceback se guardaba una referencia a web y
entonces el GC no se la llevaba?

Matías



More information about the pyar mailing list