Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: [u]nsigned en 5 Junio 2012, 18:32 pm



Título: [PyQT] Ayuda con primer script
Publicado por: [u]nsigned en 5 Junio 2012, 18:32 pm
Hola, acabo de crear mi primera aplicacion diseñando el formulario con QT Designer. Ya converti el archivo .ui a .py, y luego cree el codigo de la aplicacion en un archivo .pyw.

Hola_Mundo.py (creado con pyuic4):
Código
  1. # -*- coding: utf-8 -*-
  2.  
  3. # Form implementation generated from reading ui file 'Hola_Mundo.ui'
  4. #
  5. # Created: Tue Jun 05 13:09:41 2012
  6. #      by: PyQt4 UI code generator 4.9.1
  7. #
  8. # WARNING! All changes made in this file will be lost!
  9.  
  10. from PyQt4 import QtCore, QtGui
  11.  
  12. try:
  13.    _fromUtf8 = QtCore.QString.fromUtf8
  14. except AttributeError:
  15.    _fromUtf8 = lambda s: s
  16.  
  17. class Ui_Formulario(object):
  18.    def setupUi(self, Formulario):
  19.        Formulario.setObjectName(_fromUtf8("Formulario"))
  20.        Formulario.resize(400, 164)
  21.        Formulario.setFrameShape(QtGui.QFrame.StyledPanel)
  22.        Formulario.setFrameShadow(QtGui.QFrame.Raised)
  23.        self.texto = QtGui.QLabel(Formulario)
  24.        self.texto.setGeometry(QtCore.QRect(10, 20, 101, 16))
  25.        self.texto.setFrameShape(QtGui.QFrame.NoFrame)
  26.        self.texto.setFrameShadow(QtGui.QFrame.Plain)
  27.        self.texto.setObjectName(_fromUtf8("texto"))
  28.        self.campoNombre = QtGui.QLineEdit(Formulario)
  29.        self.campoNombre.setGeometry(QtCore.QRect(110, 20, 281, 20))
  30.        self.campoNombre.setObjectName(_fromUtf8("campoNombre"))
  31.        self.botonHola = QtGui.QPushButton(Formulario)
  32.        self.botonHola.setGeometry(QtCore.QRect(10, 50, 75, 23))
  33.        self.botonHola.setObjectName(_fromUtf8("botonHola"))
  34.        self.campoSaludo = QtGui.QLineEdit(Formulario)
  35.        self.campoSaludo.setEnabled(False)
  36.        self.campoSaludo.setGeometry(QtCore.QRect(90, 50, 301, 20))
  37.        self.campoSaludo.setObjectName(_fromUtf8("campoSaludo"))
  38.  
  39.        self.retranslateUi(Formulario)
  40.        QtCore.QObject.connect(self.botonHola, QtCore.SIGNAL(_fromUtf8("clicked()")), Formulario.saluda)
  41.        QtCore.QMetaObject.connectSlotsByName(Formulario)
  42.  
  43.    def retranslateUi(self, Formulario):
  44.        Formulario.setWindowTitle(QtGui.QApplication.translate("Formulario", "MI Primer programa con PyQT", None, QtGui.QApplication.UnicodeUTF8))
  45.        self.texto.setText(QtGui.QApplication.translate("Formulario", "Ingrese su nombre:", None, QtGui.QApplication.UnicodeUTF8))
  46.        self.botonHola.setText(QtGui.QApplication.translate("Formulario", "Hola", None, QtGui.QApplication.UnicodeUTF8))
  47.  

Y finalmente el codigo de mi aplicacion app1.pyw es el siguiente:

Código
  1. # -*- coding: utf-8 -*-
  2.  
  3. from PyQt4 import QtCore, QtGui
  4. import sys
  5.  
  6. from Hola_Mundo import Ui_Formulario
  7.  
  8. class MyForm(QtGui.QMainWindow):
  9. def __init__(self, parent=None):
  10. QtGui.QWidget.__init__(self, parent)
  11. self.ui = Ui_Formulario
  12. self.ui.setupUi(self)
  13.  
  14. if __name__ == "__main__":
  15. app = QtGui.QApplication(sys.argv)
  16. myapp = MyForm()
  17. myapp.show()
  18. sys.exit(app.exec_())
  19.  

Pero al ejecutar me sale el siguiente error:

Código:
Traceback (most recent call last):
  File "C:\py\pyqt\app1.pyw", line 16, in <module>
    myapp = MyForm()
  File "C:\py\pyqt\app1.pyw", line 12, in __init__
    self.ui.setupUi(self.ui)
TypeError: unbound method setupUi() must be called with Ui_Formulario instance as first argument (got type instance instead)

Podrian decirme que estoy haciend mal por favor?  ;D

Saludos


Título: Re: [PyQT] Ayuda con primer script
Publicado por: overxfl0w13 en 5 Junio 2012, 21:28 pm
Una lástima que no te pueda ayudar tio, sé que Pyqt4 queda de lujo a nivel visual, pero sigo prefiriendo Tkinter a la hora de hacer scripts con gui rápidos.

Tenía un ppt con bastante ayuda para lo que necesitas, si me dejas algo de tiempo te lo dejo por aquí en cuanto pueda.

Un saludo :)


Título: Re: [PyQT] Ayuda con primer script
Publicado por: sebalo12 en 26 Julio 2012, 01:51 am
Lo que yo te recomendaria hacer es ejecutar tu fomulario desde un dialogo externo.. asi te queda perfectamente separado lo que es la logica del programa de la interfaz grafica...

Ej:

Crea un form con PyQT, lo compilas con pyuic4 y luego crea un dialogo que se llame

ejecutaFORM1

class ejecutaFORM1(QtGui.QDialog):
   
    def __init__(self):
        QtGui.QDialog.__init__(self)
        FormPrincipal2 = QtGui.QMainWindow()
        self.ui = formulario.Ui_Formulario()
        self.ui.setupUi(FormPrincipal2)
        FormPrincipal2.show()
        sys.exit(app.exec_())

Proba con eso y si no te funciona contame que te dice y veo si puedo ayudarte... :)

Saludos!