如何使用python将自定义小部件添加到另一个小部件

时间:2014-06-12 10:15:02

标签: python qt widget

我使用Qt创建器创建了此小部件并生成了此代码

from PySide import QtCore, QtGui

class Ui_DATA_Entries_Widget(QtGui.QWidget):
    def setupUi(self, DATA_Entries_Widget):
        DATA_Entries_Widget.setObjectName("DATA_Entries_Widget")
        DATA_Entries_Widget.resize(676, 50)
        DATA_Entries_Widget.setMinimumSize(QtCore.QSize(676, 50))
        DATA_Entries_Widget.setMaximumSize(QtCore.QSize(676, 50))
        self.horizontalLayout = QtGui.QHBoxLayout(DATA_Entries_Widget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label = QtGui.QLabel(DATA_Entries_Widget)
        self.label.setObjectName("label")
        self.horizontalLayout.addWidget(self.label)
        self.lineEdit = QtGui.QLineEdit(DATA_Entries_Widget)
        self.lineEdit.setObjectName("lineEdit")
        self.horizontalLayout.addWidget(self.lineEdit)
        self.label_2 = QtGui.QLabel(DATA_Entries_Widget)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout.addWidget(self.label_2)
        self.lineEdit_2 = QtGui.QLineEdit(DATA_Entries_Widget)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.horizontalLayout.addWidget(self.lineEdit_2)
        self.label_3 = QtGui.QLabel(DATA_Entries_Widget)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout.addWidget(self.label_3)
        self.lineEdit_3 = QtGui.QLineEdit(DATA_Entries_Widget)
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.horizontalLayout.addWidget(self.lineEdit_3)
        self.label_5 = QtGui.QLabel(DATA_Entries_Widget)
        self.label_5.setMinimumSize(QtCore.QSize(47, 32))
        self.label_5.setObjectName("label_5")
        self.horizontalLayout.addWidget(self.label_5)
        self.lineEdit_4 = QtGui.QLineEdit(DATA_Entries_Widget)
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.horizontalLayout.addWidget(self.lineEdit_4)
        self.label_4 = QtGui.QLabel(DATA_Entries_Widget)
        self.label_4.setObjectName("label_4")
        self.horizontalLayout.addWidget(self.label_4)
        self.lineEdit_5 = QtGui.QLineEdit(DATA_Entries_Widget)
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.horizontalLayout.addWidget(self.lineEdit_5)
        self.pushButton = QtGui.QPushButton(DATA_Entries_Widget)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)

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

    def retranslateUi(self, DATA_Entries_Widget):
        DATA_Entries_Widget.setWindowTitle(QtGui.QApplication.translate("DATA_Entries_Widget", "Form", None, QtGui.QApplication.UnicodeUTF8))
        self.label.setText(QtGui.QApplication.translate("DATA_Entries_Widget", "A", None, QtGui.QApplication.UnicodeUTF8))
        self.label_2.setText(QtGui.QApplication.translate("DATA_Entries_Widget", "B", None, QtGui.QApplication.UnicodeUTF8))
        self.label_3.setText(QtGui.QApplication.translate("DATA_Entries_Widget", "C", None, QtGui.QApplication.UnicodeUTF8))
        self.label_5.setText(QtGui.QApplication.translate("DATA_Entries_Widget", "D", None, QtGui.QApplication.UnicodeUTF8))
        self.label_4.setText(QtGui.QApplication.translate("DATA_Entries_Widget", "E", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setText(QtGui.QApplication.translate("DATA_Entries_Widget", "Delete", None, QtGui.QApplication.UnicodeUTF8))

现在我需要以非常方式添加这个小部件,就像我从另一个问题得到的Test小部件一样:

from PySide import QtGui, QtCore
import sys

class Main(QtGui.QMainWindow):
    def __init__(self, parent = None):
        super(Main, self).__init__(parent)

        # main button
        self.addButton = QtGui.QPushButton('button to add other widgets')
        self.addButton.clicked.connect(self.addWidget)

        # scroll area widget contents - layout
        self.scrollLayout = QtGui.QFormLayout()

        # scroll area widget contents
        self.scrollWidget = QtGui.QWidget()
        self.scrollWidget.setLayout(self.scrollLayout)

        # scroll area
        self.scrollArea = QtGui.QScrollArea()
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setWidget(self.scrollWidget)

        # main layout
        self.mainLayout = QtGui.QVBoxLayout()

        # add all main to the main vLayout
        self.mainLayout.addWidget(self.addButton)
        self.mainLayout.addWidget(self.scrollArea)

        # central widget
        self.centralWidget = QtGui.QWidget()
        self.centralWidget.setLayout(self.mainLayout)

        # set central widget
        self.setCentralWidget(self.centralWidget)

    def addWidget(self):
        self.scrollLayout.addRow(TestButton()) 


class TestButton(QtGui.QPushButton):
    def __init__( self, parent=None):
        super(TestButton, self).__init__(parent)
        self.setText("I am in Test widget")
        self.clicked.connect(self.deleteLater)


app = QtGui.QApplication(sys.argv)
myWidget = Main()
myWidget.show()
app.exec_()

如何轻松地使用我的自定义小部件在第二个代码中替换TestButton?

非常感谢任何帮助!

0 个答案:

没有答案
相关问题