如果您有一个带有两个页面的堆叠小部件,以及两个页面上您想要的一个标签,那么如何在不使用其他变量名称重新定义的情况下执行此操作。我不确定这是否可行,但由于我有一个非常大的项目,我正在努力使我的代码尽可能小。
一个例子就是这样。
...
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,然后重新添加它的所有设置。
答案 0 :(得分:1)
根据我的经验,这是不可能的。由于QLabel
类继承了QWidget
,因此您只能在一个其他窗口小部件中添加窗口小部件。不继承QWidget
的对象可以用于任意数量的小部件。例如,QIcon
或QFont
的一个对象可用于许多小部件以设置其图标或字体。
如果您需要在多个小部件中包含标签,则需要为每个小部件创建单独的标签
<强>更新强>
如果您要创建许多小部件,则需要定义一个单独的方法来创建该小部件的对象:
...
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
方法,它将返回一个对象,根据需要将该对象放在任何小部件中。此外,您可以在保存页面对象时保存标签对象,以便稍后在代码中引用它们。