【发布时间】:2015-06-04 18:38:25
【问题描述】:
我想创建一个类,它可以在不同的应用程序及其 API 中使用来创建 UI。为此,我创建了一个名为 ui.py 的模块。该模块内部如下:
from PyQt4 import QtGui
def CreateGui(uiFile, parent=None):
print "Ui build.."
def GetUiObject(uiClass):
pUI = uiClass.PARENT
class ParentUI(pUI):
def __init__(self, uiFile):
CreateGui(uiFile, self)
def __call__(self, cls):
for func in uiClass.__dict__:
setattr(cls, func, uiClass.__dict__[func])
return ParentUI
@GetUiObject
class UI(object):
PARENT = QtGui.QMainWindow
def __init__(self, uiFile):
CreateGui(uiFile)
在应用程序使用的管道模块模块中:
from ui import UI
UI.PARENT = QtGui.QWidget
class Tool_UI(UI):
def __init__(self, uiFile):
super(Tool_UI, self).__init__(uiFile)
print "In Application"
app = QtGui.QApplication(sys.argv)
A = Tool_UI("C:/test/testUi.ui")
A.CreateGui()
但我收到以下错误:
Ui build..
In Application
Traceback (most recent call last):
File "C:/test/maxUi.py", line 13, in <module>
A.CreateGui()
RuntimeError: super-class __init__() of type Tool_UI was never called
我做错了什么?
编辑:
cpburnz 回答了代码出错的原因,但它仍然无法正常工作。 我想用另一个具有不同基础的类替换该类。我打开了一个新问题,更好地描述了我的问题以及我尝试过的不同解决方案 (How to rebase or dynamically replace a class with a different base class)。
【问题讨论】:
-
该代码到底应该做什么?它打算解决什么问题?
-
@ekhumoro:请看我的编辑。
标签: python class inheritance pyqt decorator