使用qt-designer和pyqt创建简单的表单

时间:2011-08-23 09:40:36

标签: python user-interface pyqt designer qt-designer

我正在尝试在pyqt中运行我的第一个应用程序。当我在设计师中做预览时,我的表单看起来很好:

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

但如果我从我的剧本中看到它,我得到了:

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

终端中的信息:     QLayout:尝试将QLayout“”添加到已经有布局的MyForm“表单”

问题是,我的设计出了什么问题?

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))

我正在使用它的脚本:         导入系统         来自PyQt4导入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_())

我使用设计师创建了表单,我得到了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>

1 个答案:

答案 0 :(得分:12)

我会说您在设计器中设计了QWidget,并创建了QMainWindow。 取代

class MyForm(QtGui.QMainWindow)

通过

class MyForm(QtGui.QWidget)