tutorial español python user-interface pyqt designer qt-designer

python - español - Crear una forma simple con qt-designer y pyqt



qt designer tutorial (1)

Estoy intentando ejecutar mi primera aplicación en pyqt. Mi formulario se ve bien cuando estoy haciendo una vista previa en el diseñador:

http://imageshack.us/photo/my-images/171/screenshotuw.png/

Pero si lo estoy mostrando desde mi script, tengo:

http://imageshack.us/photo/my-images/268/screenshot1hwn.png/

Y la información en la terminal: QLayout: Intentando agregar QLayout "" a MyForm "Formulario", que ya tiene un diseño

La pregunta es, ¿qué hay de malo en mi diseño?

Archivo generado por pyuic4:

# -*- coding: utf-8 -*- # Form implementation generated from reading ui file ''gui.ui'' # # Created: Tue Aug 23 11:17:30 2011 # by: PyQt4 UI code generator 4.7.2 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(464, 409) self.verticalLayout_2 = QtGui.QVBoxLayout(Form) self.verticalLayout_2.setObjectName("verticalLayout_2") self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.listView = QtGui.QListView(Form) self.listView.setObjectName("listView") self.horizontalLayout.addWidget(self.listView) self.verticalLayout = QtGui.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.pushButton = QtGui.QPushButton(Form) self.pushButton.setObjectName("pushButton") self.verticalLayout.addWidget(self.pushButton) self.pushButton_2 = QtGui.QPushButton(Form) self.pushButton_2.setObjectName("pushButton_2") self.verticalLayout.addWidget(self.pushButton_2) spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.pushButton_3 = QtGui.QPushButton(Form) self.pushButton_3.setObjectName("pushButton_3") self.verticalLayout.addWidget(self.pushButton_3) self.horizontalLayout.addLayout(self.verticalLayout) self.verticalLayout_2.addLayout(self.horizontalLayout) self.textBrowser = QtGui.QTextBrowser(Form) self.textBrowser.setObjectName("textBrowser") self.verticalLayout_2.addWidget(self.textBrowser) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8)) self.pushButton.setText(QtGui.QApplication.translate("Form", "PushButton", None, QtGui.QApplication.UnicodeUTF8)) self.pushButton_2.setText(QtGui.QApplication.translate("Form", "PushButton", None, QtGui.QApplication.UnicodeUTF8)) self.pushButton_3.setText(QtGui.QApplication.translate("Form", "PushButton", None, QtGui.QApplication.UnicodeUTF8))

Y mi script que lo está usando: import sys de PyQt4 import QtCore, QtGui

from gen import Ui_Form class MyForm(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_Form() self.ui.setupUi(self) def execute_event(self): pass def execute_all_event(self): pass def reload_event(self): pass if __name__ == "__main__": app = QtGui.QApplication(sys.argv) myapp = MyForm() myapp.show() sys.exit(app.exec_())

Creé el formulario usando el diseñador y obtuve el archivo gui.ui:

<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Form</class> <widget class="QWidget" name="Form"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>464</width> <height>409</height> </rect> </property> <property name="windowTitle"> <string>Form</string> </property> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QListView" name="listView"/> </item> <item> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QPushButton" name="pushButton"> <property name="text"> <string>PushButton</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_2"> <property name="text"> <string>PushButton</string> </property> </widget> </item> <item> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> <item> <widget class="QPushButton" name="pushButton_3"> <property name="text"> <string>PushButton</string> </property> </widget> </item> </layout> </item> </layout> </item> <item> <widget class="QTextBrowser" name="textBrowser"/> </item> </layout> </widget> <resources/> <connections/> </ui>


Diría que ha diseñado un QWidget en el diseñador y crea un QMainWindow . Reemplazar

class MyForm(QtGui.QMainWindow)

por

class MyForm(QtGui.QWidget)