oop实例化pythonic实践

2024-09-28 05:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码,我计划在同一个“import”中创建几个类。我希望实例化每个类,并用我正在制作的小部件获得一个返回值。在

这根本不是一个PyQt问题,更多的是一个“良好实践”问题,因为我将为每个小部件提供一个类。在

我应该生成返回所创建的小部件的函数吗?如果是,怎么做?如果这是我所追求的最好的方法,我如何确保直接实例化类是困难的?在

我希望能做些像。。。。在

tabs = wqTabWidget( ['firstTab', 'Second', 'Last Tab'] )

或者(哪种做法更好)

^{pr2}$

到目前为止,这是我的班级。。。。在

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_()

Tags: 实例namefromimportselfinit部件as
1条回答
网友
1楼 · 发布于 2024-09-28 05:23:28

答案将决定是否可以在运行时更改选项卡列表。如果这个小部件真的只支持添加一组选项卡,而不支持更改或附加新的选项卡,那么选项卡列表应该来自初始值设定项。否则,您还应该添加一个方法来完成这项工作。考虑一下QLabel小部件,它可以通过setText方法在初始值设定项中设置标签的文本。在

其他代码思想提示。在

初始值设定项的参数有点混乱,因为您接受任意数量的参数,但只对第一个参数执行操作,并期望它是一个字符串列表。一份清晰的论点清单很重要。在

没有必要使用apply来调用基类初始值设定项。将代码改为qg.QTabWidget.__init__(self)

当创建一个PyQt小部件时,我几乎总是倾向于允许一个“parent”参数,即使我知道小部件将是一个顶级小部件。这就是所有内置的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_()

相关问题 更多 >

    热门问题