2009-11-04 41 views
10

我在Qt设计器中创建一个简单的表单,并试图将它加载到我用PySide创建的Qt应用程序中,但没有多少运气。在Pyside中加载一个简单的Qt设计器表格

下面是`生成的代码pyside-UIC':

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

# Form implementation generated from reading ui file 'clientEditorForm.ui' 
# 
# Created: Tue Nov 3 23:46:41 2009 
#  by: PySide uic UI code generator 
# 
# WARNING! All changes made in this file will be lost! 

from PySide import QtCore, QtGui 

class Ui_clientEditorForm(object): 
    def setupUi(self, clientEditorForm): 
     clientEditorForm.setObjectName("clientEditorForm") 
     clientEditorForm.resize(575, 446) 
     self.horizontalLayout_3 = QtGui.QHBoxLayout(clientEditorForm) 
     self.horizontalLayout_3.setObjectName("horizontalLayout_3") 
     self.splitter = QtGui.QSplitter(clientEditorForm) 
     self.splitter.setOrientation(QtCore.Qt.Horizontal) 
     self.splitter.setObjectName("splitter") 
     self.layoutWidget = QtGui.QWidget(self.splitter) 
     self.layoutWidget.setObjectName("layoutWidget") 
     self.verticalLayout = QtGui.QVBoxLayout(self.layoutWidget) 
     self.verticalLayout.setObjectName("verticalLayout") 
     self.horizontalLayout_2 = QtGui.QHBoxLayout() 
     self.horizontalLayout_2.setObjectName("horizontalLayout_2") 
     self.searchLabel = QtGui.QLabel(self.layoutWidget) 
     self.searchLabel.setObjectName("searchLabel") 
     self.horizontalLayout_2.addWidget(self.searchLabel) 
     self.searchEdit = QtGui.QLineEdit(self.layoutWidget) 
     self.searchEdit.setObjectName("searchEdit") 
     self.horizontalLayout_2.addWidget(self.searchEdit) 
     self.clearButton = QtGui.QPushButton(self.layoutWidget) 
     self.clearButton.setObjectName("clearButton") 
     self.horizontalLayout_2.addWidget(self.clearButton) 
     self.verticalLayout.addLayout(self.horizontalLayout_2) 
     self.clientListView = QtGui.QListView(self.layoutWidget) 
     sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) 
     sizePolicy.setHorizontalStretch(0) 
     sizePolicy.setVerticalStretch(0) 
     sizePolicy.setHeightForWidth(self.clientListView.sizePolicy().hasHeightForWidth()) 
     self.clientListView.setSizePolicy(sizePolicy) 
     self.clientListView.setObjectName("clientListView") 
     self.verticalLayout.addWidget(self.clientListView) 
     self.frame = QtGui.QFrame(self.splitter) 
     self.frame.setFrameShape(QtGui.QFrame.StyledPanel) 
     self.frame.setFrameShadow(QtGui.QFrame.Raised) 
     self.frame.setObjectName("frame") 
     self.verticalLayout_3 = QtGui.QVBoxLayout(self.frame) 
     self.verticalLayout_3.setObjectName("verticalLayout_3") 
     self.formLayout = QtGui.QFormLayout() 
     self.formLayout.setObjectName("formLayout") 
     self.nameEdit = QtGui.QLineEdit(self.frame) 
     self.nameEdit.setObjectName("nameEdit") 
     self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.nameEdit) 
     self.nameLabel = QtGui.QLabel(self.frame) 
     self.nameLabel.setObjectName("nameLabel") 
     self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.nameLabel) 
     self.profileButton = QtGui.QLabel(self.frame) 
     self.profileButton.setObjectName("profileButton") 
     self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.profileButton) 
     self.addressLabel = QtGui.QLabel(self.frame) 
     self.addressLabel.setObjectName("addressLabel") 
     self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.addressLabel) 
     self.locationLabel = QtGui.QLabel(self.frame) 
     self.locationLabel.setObjectName("locationLabel") 
     self.formLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.locationLabel) 
     self.secureLabel = QtGui.QLabel(self.frame) 
     self.secureLabel.setObjectName("secureLabel") 
     self.formLayout.setWidget(4, QtGui.QFormLayout.LabelRole, self.secureLabel) 
     self.UUIDLabel = QtGui.QLabel(self.frame) 
     self.UUIDLabel.setObjectName("UUIDLabel") 
     self.formLayout.setWidget(5, QtGui.QFormLayout.LabelRole, self.UUIDLabel) 
     self.passwordLabel = QtGui.QLabel(self.frame) 
     self.passwordLabel.setObjectName("passwordLabel") 
     self.formLayout.setWidget(6, QtGui.QFormLayout.LabelRole, self.passwordLabel) 
     self.profileComboBox = QtGui.QComboBox(self.frame) 
     self.profileComboBox.setObjectName("profileComboBox") 
     self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.profileComboBox) 
     self.addressEdit = QtGui.QLineEdit(self.frame) 
     self.addressEdit.setObjectName("addressEdit") 
     self.formLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.addressEdit) 
     self.locationComboBox = QtGui.QComboBox(self.frame) 
     self.locationComboBox.setObjectName("locationComboBox") 
     self.formLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.locationComboBox) 
     self.secureComboBox = QtGui.QComboBox(self.frame) 
     self.secureComboBox.setObjectName("secureComboBox") 
     self.formLayout.setWidget(4, QtGui.QFormLayout.FieldRole, self.secureComboBox) 
     self.UUIDEdit = QtGui.QLineEdit(self.frame) 
     self.UUIDEdit.setObjectName("UUIDEdit") 
     self.formLayout.setWidget(5, QtGui.QFormLayout.FieldRole, self.UUIDEdit) 
     self.passwordEdit = QtGui.QLineEdit(self.frame) 
     self.passwordEdit.setObjectName("passwordEdit") 
     self.formLayout.setWidget(6, QtGui.QFormLayout.FieldRole, self.passwordEdit) 
     self.verticalLayout_3.addLayout(self.formLayout) 
     self.aliasesGroupBox = QtGui.QGroupBox(self.frame) 
     self.aliasesGroupBox.setFlat(False) 
     self.aliasesGroupBox.setCheckable(False) 
     self.aliasesGroupBox.setObjectName("aliasesGroupBox") 
     self.verticalLayout_2 = QtGui.QVBoxLayout(self.aliasesGroupBox) 
     self.verticalLayout_2.setObjectName("verticalLayout_2") 
     self.aliasesListView = QtGui.QListView(self.aliasesGroupBox) 
     self.aliasesListView.setObjectName("aliasesListView") 
     self.verticalLayout_2.addWidget(self.aliasesListView) 
     self.horizontalLayout_4 = QtGui.QHBoxLayout() 
     self.horizontalLayout_4.setObjectName("horizontalLayout_4") 
     spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) 
     self.horizontalLayout_4.addItem(spacerItem) 
     self.addButton = QtGui.QPushButton(self.aliasesGroupBox) 
     self.addButton.setObjectName("addButton") 
     self.horizontalLayout_4.addWidget(self.addButton) 
     self.removeButton = QtGui.QPushButton(self.aliasesGroupBox) 
     self.removeButton.setObjectName("removeButton") 
     self.horizontalLayout_4.addWidget(self.removeButton) 
     self.verticalLayout_2.addLayout(self.horizontalLayout_4) 
     self.verticalLayout_3.addWidget(self.aliasesGroupBox) 
     spacerItem1 = QtGui.QSpacerItem(20, 38, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) 
     self.verticalLayout_3.addItem(spacerItem1) 
     self.horizontalLayout = QtGui.QHBoxLayout() 
     self.horizontalLayout.setObjectName("horizontalLayout") 
     spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) 
     self.horizontalLayout.addItem(spacerItem2) 
     self.revertButton = QtGui.QPushButton(self.frame) 
     self.revertButton.setObjectName("revertButton") 
     self.horizontalLayout.addWidget(self.revertButton) 
     self.applyButton = QtGui.QPushButton(self.frame) 
     self.applyButton.setObjectName("applyButton") 
     self.horizontalLayout.addWidget(self.applyButton) 
     self.verticalLayout_3.addLayout(self.horizontalLayout) 
     self.horizontalLayout_3.addWidget(self.splitter) 
     self.searchLabel.setBuddy(self.searchEdit) 
     self.nameLabel.setBuddy(self.nameEdit) 
     self.profileButton.setBuddy(self.profileComboBox) 
     self.addressLabel.setBuddy(self.addressEdit) 
     self.locationLabel.setBuddy(self.locationComboBox) 
     self.secureLabel.setBuddy(self.secureComboBox) 
     self.UUIDLabel.setBuddy(self.UUIDEdit) 
     self.passwordLabel.setBuddy(self.passwordEdit) 

     self.retranslateUi(clientEditorForm) 
     QtCore.QMetaObject.connectSlotsByName(clientEditorForm) 

    def retranslateUi(self, clientEditorForm): 
     clientEditorForm.setWindowTitle(QtGui.QApplication.translate("clientEditorForm", "Form", None, QtGui.QApplication.UnicodeUTF8)) 
     self.searchLabel.setText(QtGui.QApplication.translate("clientEditorForm", "Search", None, QtGui.QApplication.UnicodeUTF8)) 
     self.clearButton.setText(QtGui.QApplication.translate("clientEditorForm", "Clear", None, QtGui.QApplication.UnicodeUTF8)) 
     self.nameLabel.setText(QtGui.QApplication.translate("clientEditorForm", "Name", None, QtGui.QApplication.UnicodeUTF8)) 
     self.profileButton.setText(QtGui.QApplication.translate("clientEditorForm", "Profile", None, QtGui.QApplication.UnicodeUTF8)) 
     self.addressLabel.setText(QtGui.QApplication.translate("clientEditorForm", "Address", None, QtGui.QApplication.UnicodeUTF8)) 
     self.locationLabel.setText(QtGui.QApplication.translate("clientEditorForm", "Location", None, QtGui.QApplication.UnicodeUTF8)) 
     self.secureLabel.setText(QtGui.QApplication.translate("clientEditorForm", "Secure", None, QtGui.QApplication.UnicodeUTF8)) 
     self.UUIDLabel.setText(QtGui.QApplication.translate("clientEditorForm", "UUID", None, QtGui.QApplication.UnicodeUTF8)) 
     self.passwordLabel.setText(QtGui.QApplication.translate("clientEditorForm", "Password", None, QtGui.QApplication.UnicodeUTF8)) 
     self.aliasesGroupBox.setTitle(QtGui.QApplication.translate("clientEditorForm", "Aliases", None, QtGui.QApplication.UnicodeUTF8)) 
     self.addButton.setText(QtGui.QApplication.translate("clientEditorForm", "Add", None, QtGui.QApplication.UnicodeUTF8)) 
     self.removeButton.setText(QtGui.QApplication.translate("clientEditorForm", "Remove", None, QtGui.QApplication.UnicodeUTF8)) 
     self.revertButton.setText(QtGui.QApplication.translate("clientEditorForm", "Revert", None, QtGui.QApplication.UnicodeUTF8)) 
     self.applyButton.setText(QtGui.QApplication.translate("clientEditorForm", "Apply", None, QtGui.QApplication.UnicodeUTF8)) 

然后我简单的应用:

import sys 
from PySide import QtCore, QtGui 

from clientEditorForm import Ui_clientEditorForm 

class MyMainWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(MyMainWindow, self).__init__(parent) 
     self.ui = Ui_clientEditorForm() 
     self.ui.setupUi(self) 

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

然而,当我尝试运行它,我得到如下:

QLayout: Attempting to add QLayout "" to QMainWindow "clientEditorForm", which already has a layout 

和分段错误。我正在按照this tutorial中的基本说明进行操作,但我无法确定我做错了什么。

+0

http://stackoverflow.com/questions/7684975/pyqt4-qt-designer-making-dynamic-guis – 2011-10-19 14:35:23

回答

5

原来在PySide中有一个QSpacerItem类的错误。在上面的代码中注释掉QSpacerItem实例使其工作得很好。有一个关于PySide bugzilla的错误报告。

4

首先,您使用PySide(诺基亚)而不是PyQt4(Riverbank Computing),尽管它们的API几乎相同,但它们不是同一个项目。该PySide例子可在这里: 混帐混帐克隆://gitorious.org/pyside/pyside-examples.git

我认为这个问题可能与您的

super(MyMainWindow, self).__init__(parent) 

呼叫做尝试

QtGui.QMainWindow.__init__(self, parent) 

改为。

我知道它看起来好像是一样的东西,但我遇到过类似的问题,使用PyQt4,我可以告诉诺基亚的PySide有同样的麻烦。它与Python拥有父级的天气或它由底层C++对象拥有的天气有关。至少尝试一下,它会花费不到5秒!

下面是我基于此的示例,它来自PySide的git回购。

#!/usr/bin/env python 

############################################################################# 
## 
## Copyright (C) 2004-2005 Trolltech AS. All rights reserved. 
## 
## This file is part of the example classes of the Qt Toolkit. 
## 
## This file may be used under the terms of the GNU General Public 
## License version 2.0 as published by the Free Software Foundation 
## and appearing in the file LICENSE.GPL included in the packaging of 
## this file. Please review the following information to ensure GNU 
## General Public Licensing requirements will be met: 
## http://www.trolltech.com/products/qt/opensource.html 
## 
## If you are unsure which license is appropriate for your use, please 
## review the following information: 
## http://www.trolltech.com/products/qt/licensing.html or contact the 
## sales department at [email protected] 
## 
## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 
## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 
## 
############################################################################# 

import sys 
from PySide import QtCore, QtGui 

from ui_calculatorform import Ui_CalculatorForm 


class CalculatorForm(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 

     self.ui = Ui_CalculatorForm() 

     self.ui.setupUi(self) 

    @QtCore.pyqtSignature("int") 
    def on_inputSpinBox1_valueChanged(self, value): 
     self.ui.outputWidget.setText(QtCore.QString.number(value + self.ui.inputSpinBox2.value())) 

    @QtCore.pyqtSignature("int") 
    def on_inputSpinBox2_valueChanged(self, value): 
     self.ui.outputWidget.setText(QtCore.QString.number(value + self.ui.inputSpinBox1.value())) 


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