Python 亚类&;重写PySide2小部件方法;我在哪里找到要引用的源?
当继承一个类并重写一个方法时,您并不总是知道原始类中有什么。如果我理解正确的话,在Python中如何处理这一点的各个方面都是特意设计来适应这一点的。但我不得不认为,所有或大部分Qt代码都有文档记录。我发现qtforpython文档令人耳目一新(与PyQt相比),并且列出了一个类的所有方法,有相当多的细节,但是我还没有找到特定方法的实际代码,并且描述并不总是非常完整。例如,考虑是否要重写组合框的MousPrimeSev.Python 亚类&;重写PySide2小部件方法;我在哪里找到要引用的源?,python,python-3.x,pyside2,Python,Python 3.x,Pyside2,当继承一个类并重写一个方法时,您并不总是知道原始类中有什么。如果我理解正确的话,在Python中如何处理这一点的各个方面都是特意设计来适应这一点的。但我不得不认为,所有或大部分Qt代码都有文档记录。我发现qtforpython文档令人耳目一新(与PyQt相比),并且列出了一个类的所有方法,有相当多的细节,但是我还没有找到特定方法的实际代码,并且描述并不总是非常完整。例如,考虑是否要重写组合框的MousPrimeSev. class mycombo(QtWidgets.QComboBox):
class mycombo(QtWidgets.QComboBox):
def __init__(self, parent = None):
super(mycombo, self).__init__()
self.setAcceptDrops(True)
self.setFocusPolicy(QtCore.Qt.NoFocus)
def mousePressEvent(self,event):
在qtforpython文档中,我看到QComboBox继承自QWidget
关于mousePressEvent有这样的说法:
这里写了一些有用的东西,但是,我如何确定“原始”mousePressEvent中实际发生了什么?我不想干扰实际需要的操作的其他部分。在这种情况下,可能需要像描述中提到的那样处理弹出窗口小部件。但我也可能不想超越原来的方法。是否有更多我不知何故错过的文档?似乎有些小部件在Python中被子类化和修改,而其他的只是在C++中。p> TL;博士由于源代码可以在不通知开发人员的情况下更改,因此没有文档或需求
实际上,您不应该知道每个方法都做了什么,因为在新版本中可能会发生变化。如果您的目标是添加功能,那么不要通过调用父类的
super().foo_method()
,来覆盖父类的实现,这样您就可以在原始实现之前或之后添加逻辑
class MyCombo(qtwidts.QComboBox):
def uuu init uuu(self,parent=None):
超级(MyCombo,self)。\uuuu初始(父)
self.setAcceptDrops(真)
self.setFocusPolicy(QtCore.Qt.NoFocus)
def鼠标压力事件(自身、事件):
#东西
超级(MyCombo,self)。鼠标压力(事件)
#另一件事
如果您仍想知道该函数中发生了什么,则应检查:
void QComboBox::mousePressEvent(QMouseEvent*e)
{
Q_D(QComboBox);
如果(!QGUI应用程序::样式提示()->setFocusOnTouchRelease())
d->ShowPopupFromMouseeEvent(e);
}
Qt有两种类型的API,因为它实现了,所以分析类的源代码是不够的,如果你想理解逻辑,公共API很少改变它是什么,但是私有API不断地改变
总之,如果您想添加功能,那么只需分析文档,因为即使在代码更改时也会遵守这一点。理解其工作原理的另一种方法是修改和分析GUI中发生的更改
python的pyqt/qt是一个处理C++类的包装器,所以一般来说,C++中可以做的事情可以在Python中完成,除了一些可以在一个而不是在另一个中完成的小事情。