PySide:如何覆盖从.ui文件创建的对象上的虚方法?

时间:2014-06-23 11:31:24

标签: pyside

我正在尝试使用PySide的QWizard :: validateCurrentPage。 我的向导类是使用PySide.QtUiTools.QUiLoader从.ui文件加载的

我创建了一个应该覆盖内置QWizard :: validateCurrentPage:

的函数
def validateDataPage(self):
    return False

现在我试图覆盖这样的内置方法:

    self.wizard = uiloader.load("registrationwizard.ui")
    f = types.MethodType(validateDataPage, 
                         self.wizard, 
                         QtGui.QWizard)
    self.wizard.validateCurrentPage = f

我在调试器中看到validateCurrentPage已被替换:

self.wizard.validateCurrentPage
<bound method QWizard.validateDataPage of <PySide.QtGui.QWizard object at 0x04CC31C0>>

我可以从调试器调用它,但是当我点击&#34; next&#34;页。

我做错了什么,在构造对象时无法覆盖虚函数?

1 个答案:

答案 0 :(得分:0)

我很确定它应该可行,因为你的方式是Python中Adding a Method to an Existing Object的规范方式。

我做了一个小例子,它似乎对我有用。

import types
from PySide import QtGui

def overload(self):
    print(self.validateCurrentPage)
    return False

app = QtGui.QApplication([])
wizard = QtGui.QWizard()
wizard.validateCurrentPage = types.MethodType(overload, wizard)
wizard.addPage(QtGui.QWizardPage())
wizard.addPage(QtGui.QWizardPage())
wizard.show()
app.exec_()

打印

<bound method QWizard.overload of <PySide.QtGui.QWizard object at xx>>