PyQt样式guid

2024-04-26 21:57:00 发布

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

我目前正在使用PyQt绑定用Python编写我的第一个开源Qt应用程序。我注意到在编写代码时有一些习惯,这可能会影响代码的可读性。具体来说,我有以下顾虑:

属性


因为我不想让decorator用数百行填满我所有类的函数列表,所以我给自己做了一个模板,将每个(PyQt-)属性放入一行代码中,从而将PEP-8完全抛出窗口,并将其埋在6英尺以下:

propertyName = pyqtProperty(QVariant,fget=lambda self:QVariant(functionThatGetsThePropertyValue()),fset=lambda self,x:[defaultFunc1(),defaultFunc2(),] if x is None else [None for (variableToSet1,variableToSet2,) in ((x,otherInputVariables_inThisCaseOnlyX),) for _ in (functionToCall1(x),functionToCall2(x),)] )

以下是几个例子:

^{pr2}$

它是

  • 紧凑型
  • 有点可读(至少对我来说)
  • 易于编辑并具有
  • 在功能性和可扩展性方面没有缺点。在

与此相比,更符合PEP-8标准:

    @pyqtProperty(QVariant)
    def styleRules(self):
        return self.styleSheet()
    @styleRules.setter
    def styleRules(self,x):
        if x is None:
            self.setProperty('styleRules','')
        else:
            self.setStyleSheet(Helper.styleSheetDictToString(Helper.updateStyleSheet(self.styleSheet(),x)))

    @pyqtProperty(QVariant)
    def handle1Style(self):
        return self.splitter.handle(1).styleSheet()
    @handle1Style.setter
    def handle1Style(self):
        if x is None:
            self.setProperty('handle1Style','background-color:rgba(0,0,0,0)')
        else:
            self.settings['handle1Style'] = x
            self.splitter.handle(1).setStyleSheet(x)

    @pyqtProperty(QVariant)
    def handle2Style(self):
        return self.splitter.handle(2).styleSheet()
    @handle2Style.setter
    def handle2Style(self):
        if x is None:
            self.setProperty('handle2Style','background-color:rgba(0,0,0,0)')
        else:
            self.settings['handle2Style'] = x
            self.splitter.handle(2).setStyleSheet(x)

    @pyqtProperty(QVariant)
    def handle3Style(self):
        return self.splitter.handle(3).styleSheet()
    @handle3Style.setter
    def handle3Style(self):
        if x is None:
            self.setProperty('handle3Style','background-color:rgba(0,0,0,0)')
        else:
            self.settings['handle3Style'] = x
            self.splitter.handle(3).setStyleSheet(x)

    @pyqtProperty(QVariant)
    def keywordCollapsible(self):
        return self.splitter.isCollapsible(1)
    @keywordCollapsible.setter
    def keywordCollapsible(self):
        if x is None:
            self.setProperty('keywordCollapsible', False)

        else:
            self.settings['keywordCollapsible'] = True if x == 'true' else False
            self.splitter.setCollapsible(1,True if x == 'true' else False)

    @pyqtProperty(QVariant)
    def controlCollapsible(self):
        return self.splitter.isCollapsible(3)
    @controlCollapsible.setter
    def controlCollapsible(self):
        if x is None:
            self.setProperty('controlCollapsible',False)

        else:
            self.settings['controlCollapsible'] = True if x == 'true' else False
            self.splitter.setCollapsible(3,True if x == 'true' else False)

    @pyqtProperty(QVariant)
    def splitterSizes(self):
        return tuple(self.splitter.sizes())
    @splitterSizes.setter
    def splitterSizes(self):
        if x is None:
            self.setProperty('splitterSizes',(0,0,0,0))
        else:
            self.settings['splitterSizes'] = x
            self.splitter.setSizes(x)

我的风格是可以接受的还是应该切换到更详细的版本?如果是,为什么?在

子类化


我倾向于将我使用的每个Qt对象都子类化。我只想从小部件内部定义小部件的属性和属性,而不是让父部件完成所有工作。在

我怎么知道,子类化一个特定的实例是否合适?当它有自己的方法、属性、事件处理程序时?当我知道我将要创建新类的多个实例时,我是否应该只使用子类,或者仅仅为了美观的目的这样做是可以接受的吗?在

嵌套类


因为我创建了太多的类,所以我把它们放在它们父类的类中,尽管我听说过有人不鼓励使用嵌套的Python类,因为它们没有真正的用途。是否有其他原因不这样做,或者仅仅为了分组而嵌套类?在


Tags: selfnonefalsereturnifsettingsisdef