[PyQT] Ayuda con primer script

Iniciado por [u]nsigned, 5 Junio 2012, 18:32 PM

0 Miembros y 1 Visitante están viendo este tema.

[u]nsigned

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 (python) [Seleccionar]

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Hola_Mundo.ui'
#
# Created: Tue Jun 05 13:09:41 2012
#      by: PyQt4 UI code generator 4.9.1
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_Formulario(object):
    def setupUi(self, Formulario):
        Formulario.setObjectName(_fromUtf8("Formulario"))
        Formulario.resize(400, 164)
        Formulario.setFrameShape(QtGui.QFrame.StyledPanel)
        Formulario.setFrameShadow(QtGui.QFrame.Raised)
        self.texto = QtGui.QLabel(Formulario)
        self.texto.setGeometry(QtCore.QRect(10, 20, 101, 16))
        self.texto.setFrameShape(QtGui.QFrame.NoFrame)
        self.texto.setFrameShadow(QtGui.QFrame.Plain)
        self.texto.setObjectName(_fromUtf8("texto"))
        self.campoNombre = QtGui.QLineEdit(Formulario)
        self.campoNombre.setGeometry(QtCore.QRect(110, 20, 281, 20))
        self.campoNombre.setObjectName(_fromUtf8("campoNombre"))
        self.botonHola = QtGui.QPushButton(Formulario)
        self.botonHola.setGeometry(QtCore.QRect(10, 50, 75, 23))
        self.botonHola.setObjectName(_fromUtf8("botonHola"))
        self.campoSaludo = QtGui.QLineEdit(Formulario)
        self.campoSaludo.setEnabled(False)
        self.campoSaludo.setGeometry(QtCore.QRect(90, 50, 301, 20))
        self.campoSaludo.setObjectName(_fromUtf8("campoSaludo"))

        self.retranslateUi(Formulario)
        QtCore.QObject.connect(self.botonHola, QtCore.SIGNAL(_fromUtf8("clicked()")), Formulario.saluda)
        QtCore.QMetaObject.connectSlotsByName(Formulario)

    def retranslateUi(self, Formulario):
        Formulario.setWindowTitle(QtGui.QApplication.translate("Formulario", "MI Primer programa con PyQT", None, QtGui.QApplication.UnicodeUTF8))
        self.texto.setText(QtGui.QApplication.translate("Formulario", "Ingrese su nombre:", None, QtGui.QApplication.UnicodeUTF8))
        self.botonHola.setText(QtGui.QApplication.translate("Formulario", "Hola", None, QtGui.QApplication.UnicodeUTF8))


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

Código (python) [Seleccionar]

# -*- coding: utf-8 -*-

from PyQt4 import QtCore, QtGui
import sys

from Hola_Mundo import Ui_Formulario

class MyForm(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_Formulario
self.ui.setupUi(self)

if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = MyForm()
myapp.show()
sys.exit(app.exec_())


Pero al ejecutar me sale el siguiente error:

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

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

overxfl0w13

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 :)
[/url]

sebalo12

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!