designer和pyqt创建简单表单

designer和pyqt创建简单表单

本文介绍了使用qt-designer和pyqt创建简单表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在pyqt中运行我的第一个应用程序。在设计器中进行预览时,我的表单看起来不错:

I'm trying to run my first application in pyqt. My form looks fine when I'm doing preview in designer:

但是如果我从脚本中显示它,我将得到:

But if I'm showing it from my script I got:

和信息在终端中:
QLayout:尝试将QLayout添加到已经具有布局的MyForm Form

And information in terminal: QLayout: Attempting to add QLayout "" to MyForm "Form", which already has a layout

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

The question is, what is wrong with my design?

由pyuic4生成的文件:

Generated file by 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的
导入系统

And my script which is using it: import sys from 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_())

我使用设计器创建了表单, gui.ui文件:

I created form using designer and I got gui.ui file:

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


推荐答案

我想说您已经设计了 QWidget ,然后创建一个 QMainWindow
替换

I would say that you have designed a QWidget in the designer, and you create a QMainWindow.Replace

class MyForm(QtGui.QMainWindow)

by

class MyForm(QtGui.QWidget)

这篇关于使用qt-designer和pyqt创建简单表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 03:17