如何重用堆叠小部件中另一个页面中的项目-pyqt

时间:2013-12-16 01:51:27

标签: python pyqt pyqt4

如果您有一个带有两个页面的堆叠小部件,以及两个页面上您想要的一个标签,那么如何在不使用其他变量名称重新定义的情况下执行此操作。我不确定这是否可行,但由于我有一个非常大的项目,我正在努力使我的代码尽可能小。

一个例子就是这样。

...
self.firstPage = QtGui.QWidget()
self.firstPage.setObjectName(_fromUtf8("firstPage"))

self.testLabel = QtGui.QLabel(self.firstPage)
self.testLabel.setGeometry(QtCore.QRect(0, 0, 921, 91))
self.testLabel.setText(_fromUtf8("this is just a test label"))
self.testLabel.setObjectName(_fromUtf8("testLabel"))

self.stackedWidget.addWidget(self.firstPage)


self.secondPage = QtGui.QWidget()
...
self.stackedWdiget.addWidget(self.secondPage)

我想将testLabel添加到stackedWidget中的secondPage。是将testLabel放到第二页上以重新定义它的唯一方法,如testLabel-2,然后重新添加它的所有设置。

1 个答案:

答案 0 :(得分:1)

根据我的经验,这是不可能的。由于QLabel类继承了QWidget,因此您只能在一个其他窗口小部件中添加窗口小部件。不继承QWidget的对象可以用于任意数量的小部件。例如,QIconQFont的一个对象可用于许多小部件以设置其图标或字体。

如果您需要在多个小部件中包含标签,则需要为每个小部件创建单独的标签

<强>更新

如果您要创建许多小部件,则需要定义一个单独的方法来创建该小部件的对象:

...
def createPage(self, objName):
    page = QtGui.QWidget()
    page.setObjectName(_fromUtf8(objName))
    return page

def createLabel(self, parent, objName, text):
    label = QtGui.QLabel(parent)
    label.setGeometry(QtCore.QRect(0, 0, 921, 91))
    label.setText(_fromUtf8(text))
    label.setObjectName(_fromUtf8(objName))
    return label

def setPages(self)
    self.firstPage = self.createPage("firstPage")
    # call self.createLabel and add label to self.firstPage
    self.secondPage = self.createPage("secondPage")
    self.stackedWidget.addWidget(self.firstPage)
    self.stackedWidget.addWidget(self.secondPage)
...

您现在可以根据需要创建任意数量的标签,而无需重复代码。这是为您认为将在应用程序中重复的代码创建单独方法的好习惯。在您的情况下,调用createLabel方法,它将返回一个对象,根据需要将该对象放在任何小部件中。此外,您可以在保存页面对象时保存标签对象,以便稍后在代码中引用它们。