[pyar] PyQt cargar interfaces de forma dinámica

Roberto Alsina ralsina en netmanagers.com.ar
Mar Jun 5 11:43:02 ART 2012


On 06/05/2012 11:24 AM, Federico Apelhanz wrote:
> bueno, probando y jugando más, todo se resume a esto:
>   esto no anda:
> def main():
>      app = QtGui.QApplication(sys.argv) #creamos la app, siempre se hace
> así.
>      global ui
>      ui = MainWindow() #creamos la MainWindow, pero todavía no la mostramos
>      ui.ventana.setMenusBar(ui)

Ehhhh? Que se supone que hace eso?

>      ui.show()
>      from ui_ComprobanteDeCompra import Ui_Form
>      comprobanteForm = Ui_Form()
>      comprobanteForm.setupUi(ui)
>      sys.exit(app.exec_())

Te estas complicando mucho!

>
> esto anda (más o menos, es como si cerrara y volviera a abrir la
> aplicación lo cual no me gusta para nada):
>
> def main():
>      app = QtGui.QApplication(sys.argv) #creamos la app, siempre se hace
> así.
>      global ui
>      ui = MainWindow() #creamos la MainWindow, pero todavía no la mostramos
>      ui.ventana.setMenusBar(ui)
>      ui.show()
>      ui.hide()
>      from ui_ComprobanteDeCompra import Ui_Form
>      comprobanteForm = Ui_Form()
>      comprobanteForm.setupUi(ui)
>      ui.show()
>      sys.exit(app.exec_())
>
>
> pareciera que qt no refresca la vista, ¿hay alguna manera de forzarlo a
> hacerlo que no sea TAN crota?

En general es muy sencillo. Si tenes el Ui_Form (que no lo importás 
adentro de main, eso es una chanchada), create una clase que herede de 
QMainWindow (supongo que tu MainWindow es eso), y después, en el 
__init__ de esa clase (no en el main!):

  class MainWindow(QtGui.QMainWindow):
       def __init__(self):
           QtGui.QMainWindow.__init__(self)

           self.ui=Ui_Form()
           self.ui.setupUi(self)

Nota: si tenés un Ui_Form quiere decir que en designer creaste algo que 
no es un QMainWindow, y eso no va a andar bien jamás.

Despues en main es esto nomás:

def main():
       app = QtGui.QApplication(sys.argv)
       window=MainWindow()
       window.show()
       sys.exit(app.exec_())

Si querés pasarle argumentos cuando creás tu MainWindow, los pasás, no 
hay ningún problema.



More information about the pyar mailing list