Python TypeError:无法转换

Python TypeError:无法转换,python,pyside,Python,Pyside,使用python,pyside,我得到以下错误: self.setCheckState(value) TypeError: could not convert 'BooleanEditor' to 'QCheckBox' 除了谷歌的许多结果只显示“TypeError:可以不转换”而不是“可以”,我仍然不知道如何解决这个问题 代码段: class Editor(QGraphicsLayoutItem): def __init__(self, name): QGr

使用
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。根据调试打印,未选中的
(==0)与预期一致

请注意,
BooleanEditor
采用了
多重继承
。我正在将
wxWidget
应用程序(其他人制作的)移植到
Qt
,目前我不想更改此设计,因为它来自原始版本(这意味着这里的多继承本身不应该是原因,因为原始应用程序工作正常)

环境)PySide1.1.0、python 2.7.3、Ubuntu 12.04


更新-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'

对我来说,似乎是多重继承中的初始化问题。

我的情况非常糟糕,结果我使用的是
PyQt4
而不是
PySide
。当我使用
PySide
时,不会发生错误(如@phihag的要点所示),而使用
PyQt4
会产生相同的结果。这确实很奇怪,但我现在不想进一步调查

使用以下代码进行复制

#!/usr/bin/env python    
import sys
from PySide.QtCore import Qt
from PySide.QtGui import QApplication, QCheckBox, QGraphicsLayoutItem
#from PyQt4.QtCore import Qt
#from PyQt4.QtGui import QApplication, QCheckBox, QGraphicsLayoutItem

class Editor(QGraphicsLayoutItem):
    def __init__(self, name):
        QGraphicsLayoutItem.__init__(self)
    def update_value(self, value):
        pass

class BooleanEditor(Editor, QCheckBox):
    def __init__(self, value):
        Editor.__init__(self, "foo")
        QCheckBox.__init__(self)

        self.update_value(value)

    def update_value(self, value):
        self.old_value = value
        self.setCheckState(value) # Error occurs here
        print("End of update_value")

if __name__ == "__main__":
    qApp = QApplication(sys.argv)
    BooleanEditor(Qt.Checked)

附:为什么我不知道我在使用
PyQt
?对于我使用的哪一个,我取决于我一直在使用的这个框架(调用),它没有明确告诉我使用的是哪一个(它是开源的prj,文档工作正在进行)…在侵入其代码之后,我发现默认值是
PyQt

如果您更改
BooleanEditor
s超类的顺序(即编写
class BooleanEditor(QCheckBox,Editor):
),会有帮助吗?很好的问题,它唯一缺少的是一个。请注意,这不需要布尔值,但这可能不是问题所在。我无法在我的系统(PySide1.1.3、Python2.7.3、debian sid)上重现错误。如果您在系统上运行示例代码,是否可以重现
无法转换
错误?@phihag我得到的错误与您在代码示例中注释掉的错误相同,但我没有得到
无法转换
错误。。。hmm@IsaacS你能创建一个完整的原始代码吗?在一个我们只看到一小部分的程序中解决一个问题是很困难的。