[pyar] duda de pyqt4, abriendo nuevas ventanas

Roberto Alsina ralsina en netmanagers.com.ar
Lun Nov 29 06:18:56 ART 2010


On Monday 29 November 2010 01:51:16 Matias Graña wrote:
> Estoy intentando hacer una mini aplicación con PyQt4. Tengo un
> problema al abrir una nueva ventana. A los bifes; el código es:
> 
> ------------------------------
> from PyQt4 import QtCore, QtGui, QtWebKit
> 
> 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")

> 
>     def keyPressEvent(self, event):
>         key = event.key()
>         if key == QtCore.Qt.Key_O:
>             self.abrir_pagina()
> 
>     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.

En resumen:

from PyQt4 import QtCore, QtGui, QtWebKit

class Foo(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.setObjectName("MainWindow")

    def keyPressEvent(self, event):
        key = event.key()
        if key == QtCore.Qt.Key_O:
            self.abrir_pagina()

    def abrir_pagina(self):
        self.web = QtWebKit.QWebView()
        self.web.load(QtCore.QUrl('http://google.com.ar'))
        self.web.show()

if __name__ == '__main__':
    app = QtGui.QApplication([])
    foo = Foo()
    foo.show()
    app.exec_()



More information about the pyar mailing list