Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 面向对象实例化pythonic实践_Oop_Pyqt_Python - Fatal编程技术网

Oop 面向对象实例化pythonic实践

Oop 面向对象实例化pythonic实践,oop,pyqt,python,Oop,Pyqt,Python,我有下面的代码,我计划在同一个“导入”中创建几个类。我希望实例化每个类,并通过我正在制作的小部件获得一个返回值 这根本不是一个PyQt问题,更多的是一个“良好实践”问题,因为我将为每个小部件创建一个类 我应该创建返回创建的小部件的函数吗?如果是,如何创建?如果直接实例化这个类是我所追求的最好的方法,我如何确保它是困难的 我希望能做一些像 tabs = wqTabWidget( ['firstTab', 'Second', 'Last Tab'] ) 或者(哪种做法更好) 这是到目前为止我的班级

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

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

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

我希望能做一些像

tabs = wqTabWidget( ['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_()

如果选项卡列表可以在运行时更改,则将决定答案。如果这个小部件真的只支持添加一组选项卡,而不支持更改或追加新的选项卡,那么选项卡列表应该来自初始值设定项。否则,您还应该添加一个方法来完成此工作。考虑<代码> qLabor <代码>控件,它可以在初始化器中设置标签文本,并通过<代码> SETTEX/<代码>方法。

其他代码创意提示

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

使用
apply
调用基类初始值设定项是不必要的。将代码更改为simply
qg.QTabWidget.\uuuu init\uuuuu(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_()

如果选项卡列表可以在运行时更改,则将决定答案。如果这个小部件真的只支持添加一组选项卡,而不支持更改或追加新的选项卡,那么选项卡列表应该来自初始值设定项。否则,您还应该添加一个方法来完成此工作。考虑<代码> qLabor <代码>控件,它可以在初始化器中设置标签文本,并通过<代码> SETTEX/<代码>方法。

其他代码创意提示

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

使用
apply
调用基类初始值设定项是不必要的。将代码更改为simply
qg.QTabWidget.\uuuu init\uuuuu(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_()