我目前正在使用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类,因为它们没有真正的用途。是否有其他原因不这样做,或者仅仅为了分组而嵌套类?在
目前没有回答
相关问题 更多 >
编程相关推荐