Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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
Python 亚类&;重写PySide2小部件方法;我在哪里找到要引用的源?_Python_Python 3.x_Pyside2 - Fatal编程技术网

Python 亚类&;重写PySide2小部件方法;我在哪里找到要引用的源?

Python 亚类&;重写PySide2小部件方法;我在哪里找到要引用的源?,python,python-3.x,pyside2,Python,Python 3.x,Pyside2,当继承一个类并重写一个方法时,您并不总是知道原始类中有什么。如果我理解正确的话,在Python中如何处理这一点的各个方面都是特意设计来适应这一点的。但我不得不认为,所有或大部分Qt代码都有文档记录。我发现qtforpython文档令人耳目一新(与PyQt相比),并且列出了一个类的所有方法,有相当多的细节,但是我还没有找到特定方法的实际代码,并且描述并不总是非常完整。例如,考虑是否要重写组合框的MousPrimeSev. class mycombo(QtWidgets.QComboBox):

当继承一个类并重写一个方法时,您并不总是知道原始类中有什么。如果我理解正确的话,在Python中如何处理这一点的各个方面都是特意设计来适应这一点的。但我不得不认为,所有或大部分Qt代码都有文档记录。我发现qtforpython文档令人耳目一新(与PyQt相比),并且列出了一个类的所有方法,有相当多的细节,但是我还没有找到特定方法的实际代码,并且描述并不总是非常完整。例如,考虑是否要重写组合框的MousPrimeSev.
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中完成,除了一些可以在一个而不是在另一个中完成的小事情。