使用python
, pyside
,我得到这个错误:
self.setCheckState(value)
TypeError: could not convert 'BooleanEditor' to 'QCheckBox'
除了许多谷歌的结果只显示“TypeError:无法转换”而不是“可以”,我仍然不知道如何解决这个问题。
代码片段:
class Editor(QGraphicsLayoutItem):
def __init__(self, name):
QGraphicsLayoutItem.__init__(self)
:
:
def update_value(self, value):
pass
class BooleanEditor(Editor, QCheckBox):
def __init__(self, parent, name, value, min, max):
Editor.__init__(self, name)
QCheckBox.__init__(self)
self.update_value(value)
def update_value(self, value):
self.old_value = value
self.setCheckState(value) # Error occurs here.
setCheckState 收到的“值”将是Qt.CheckState。根据调试打印,运行时,“值”Qt.Unchecked
如预期的那样是 (== 0)。
请注意,BooleanEditor
使用multiple inheritance
. 我正在将wxWidget
应用程序(其他人制作的)移植到Qt
,现在我不想更改此设计,因为它来自原始(这意味着这里的多重继承本身不应该是原因,因为原始应用程序工作正常)。
环境)pyside 1.1.0、python 2.7.3、Ubuntu 12.04
Update-1) 正如@Luke Woodward 建议的那样,我尝试将超类的顺序交换为BooleanEditor(QCheckBox, Editor)
,然后在不同部分得到不同的错误。
class PaneGroup(GroupView, QFrame):
def __init__(self, parent, group, config, top = None):
GroupView.__init__(self, group, top)
QFrame.__init__(self)
:
sizer = QGraphicsGridLayout()
:
for param_descr in self.params:
name = param_descr['name']
type, val, min, max, description = param_descr['type'], config[name], param_descr['min'], param_descr['max'], param_descr['description']
try:
enum = eval(param_descr['edit_method'])['enum']
editor = self.top.EnumEditor(self, name, val, enum)
except:
editor = self.top._editor_types[type](self, name, val, min, max)
self.top.editors[name] = editor
sizer.addItem(editor, row, 1) # Error occurs here
错误:
TypeError: could not convert 'BooleanEditor' to 'QGraphicsLayoutItem'
对我来说,这似乎是一个关于多重继承初始化的问题..