、を使用するpython
とpyside
、次のエラーが発生します。
self.setCheckState(value)
TypeError: could not convert 'BooleanEditor' to 'QCheckBox'
Googleの結果の多くは、「 could 」ではなく「TypeError: can not convert」しか表示しないことに加えて、これを修正する方法がまだわかりません。
コードスニペット:
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
更新-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'
私には多重継承の初期化に関する問題のように見えます。