我已经得到了下面的代码,我计划在同一个“导入”中创建几个类。我希望实例化每个类,并使用我正在制作的小部件获得返回值。
这根本不是一个PyQt问题,更多的是一个“好的做法”问题,因为我将为每个小部件设置一个类。
我应该创建返回创建的小部件的函数,如果是这样的话?如果这是我所追求的最佳方法,我如何确保难以直接实例化该类?
我希望能够做点像......
tabs = wqTabWidget( ['firstTab', 'Second', 'Last Tab'] )
或(这是一种更好的做法)
tabs = wqInstance.createTabs( ['firstTab', 'Second', 'Last Tab'] )
到目前为止,这是我的班级......
from PyQt4 import QtCore as qc
from PyQt4 import QtGui as qg
class wqTabWidget(qg.QTabWidget):
def __init__(self, *args):
apply(qg.QTabWidget.__init__,(self, ))
tabList = []
tabNames = args[0]
for name in tabNames:
tabWidget = qg.QWidget()
self.addTab(tabWidget, name)
tabList.append( { name:tabWidget } )
print 'hi'
if __name__ == '__main__':
app = qg.QApplication(sys.argv)
window = wqTabWidget(['hi', 'there', 'and', 'stuff'])
window.show()
app.exec_()
答案 0 :(得分:4)
如果可以在运行时更改选项卡列表,将决定答案。如果此窗口小部件实际上仅支持添加一组选项卡,但从不更改或附加新选项卡,则选项卡列表应来自初始化程序。否则,您还应该添加一个方法来完成这项工作。考虑QLabel
窗口小部件,它可以在初始值设定项中通过setText
方法设置标签的文本。
其他代码提示提示。
你的初始化器的参数有点令人困惑,因为你接受任意数量的参数,但只对第一个参数做一些事情,并期望它是一个字符串列表。清楚的参数列表很重要。
您无需使用apply
来调用基类初始值设定项。将代码更改为qg.QTabWidget.__init__(self)
在创建PyQt小部件时,我几乎总是喜欢允许“父”参数,即使我知道小部件将是一个顶级小部件。这就是所有内置的Pyqt方法所做的事情,并且感觉就像是遵循的好习惯。
我也看不到存储选项卡列表的原因,每个选项卡都是单个元素字典。我怀疑您不需要保留自己的选项卡和选项卡名称列表。 QTabWidget可以回答有关内容的所有问题。
如果我将此示例代码弯曲到我自己的首选项,它将看起来像这样。
from PyQt4 import QtCore as qc
from PyQt4 import QtGui as qg
class wqTabWidget(qg.QTabWidget):
def __init__(self, parent, tabNames):
qg.QTabWidget.__init__(self, parent)
self.createTabs(tabNames)
def createTabs(tabNames):
for name in tabNames:
tabWidget = qg.QWidget()
self.addTab(tabWidget, name)
if __name__ == '__main__':
app = qg.QApplication(sys.argv)
window = wqTabWidget(None, ['hi', 'there', 'and', 'stuff'])
window.show()
app.exec_()