wxPython Phoenix DataViewTreeControl() 有 "Segmentation fault (core dumped)"
wxPython Phoenix DataViewTreeControl() has "Segmentation fault (core dumped)"
我是 wxPython 的新手,正在尝试添加 DataViewTreeControl。控件显示得很好。但是,当我关联数据时,我得到 Segmentation fault (core dumped)
。我已经做了足够多的工作,知道它每次尝试从 GetValue()
方法 return 时都会发生。
我在 Data View Model Demo 之后设计了我的实施模式,我相信它做得很好。
我读到错误地尝试更新对象会导致此类错误 (here),但我不相信我正在这样做。我曾尝试使用 wx.CallAfter()
和 wx.CallLater()
但没有成功。
该应用程序确实有一个工具栏和网格当前可以正常工作,所以我知道整个东西都没有坏。
如果我像上面的演示那样保留实现,在尝试 return mapper[col]
时会发生分段错误(相当于演示中的第 180 行),在这种情况下 mapper[col]
的类型是 'unicode'
.
如果我将该值转换为字符串(这是我的列数据类型设置的内容),那么在下面第 16 行出现段错误之前我会更进一步(我不确定这是否重要,但它在这里):
> /usr/lib/python2.7/encodings/utf_8.py(16)decode()
15 def decode(input, errors='strict'):
---> 16 return codecs.utf_8_decode(input, errors, True)
我正在寻找关于这是否可能是线程问题或者它是否可能是我的数据模型实现错误的方向。
正如我所说,在我尝试将模型与控件相关联之前,这一直有效。这是一个最小的非工作示例(自我,在这种情况下是 wx.Frame):
def get_metadata(self):
mdDict = dict()
a1 = coremetadata.mdCoreAttribute(0, 'att1', 'cat1', 1, 'core1')
a2 = coremetadata.mdCoreAttribute(1, 'att2', 'cat1', 2, 'core1')
a3 = coremetadata.mdCoreAttribute(2, 'att3', 'cat3', 3, 'core1')
c1 = coremetadata.mdCore('core1')
c1.atts.append(a1)
c1.atts.append(a2)
c1.atts.append(a3)
mdDict['core1'] = c1
return coremetadata.CoreMetaData(mdDict.values())
def createDVTC(self):
self.dvtc = dv.DataViewTreeCtrl(self.grid, wx.ID_ANY, size=(300,300))
mdata = self.get_metadata()
# tell the object to use our data
self.dvtc.AssociateModel(mdata)
return self.dvtc
def create_mdPane(self):
self.dvtc = self.createDVTC()
self._mgr.AddPane(self.dvtc, aui.AuiPaneInfo().
Name("MDNotebook").Caption("Metadata Display").
Right().Layer(1).Position(1).MinimizeButton(True))
感谢您的帮助!
这不是线程问题。这是我对模型的实现。在 GetParent()
和 GetChildren()
函数中 return 适当的数据类型(使用 ObjectToItem()
)必须小心谨慎。
具体来说,我没有在 GetParent()
函数中使用 ObjectToItem()
...
一些非常基本的东西,但是当唯一的反馈是分段错误时,它并不容易找到。
我是 wxPython 的新手,正在尝试添加 DataViewTreeControl。控件显示得很好。但是,当我关联数据时,我得到 Segmentation fault (core dumped)
。我已经做了足够多的工作,知道它每次尝试从 GetValue()
方法 return 时都会发生。
我在 Data View Model Demo 之后设计了我的实施模式,我相信它做得很好。
我读到错误地尝试更新对象会导致此类错误 (here),但我不相信我正在这样做。我曾尝试使用 wx.CallAfter()
和 wx.CallLater()
但没有成功。
该应用程序确实有一个工具栏和网格当前可以正常工作,所以我知道整个东西都没有坏。
如果我像上面的演示那样保留实现,在尝试 return mapper[col]
时会发生分段错误(相当于演示中的第 180 行),在这种情况下 mapper[col]
的类型是 'unicode'
.
如果我将该值转换为字符串(这是我的列数据类型设置的内容),那么在下面第 16 行出现段错误之前我会更进一步(我不确定这是否重要,但它在这里):
> /usr/lib/python2.7/encodings/utf_8.py(16)decode()
15 def decode(input, errors='strict'):
---> 16 return codecs.utf_8_decode(input, errors, True)
我正在寻找关于这是否可能是线程问题或者它是否可能是我的数据模型实现错误的方向。
正如我所说,在我尝试将模型与控件相关联之前,这一直有效。这是一个最小的非工作示例(自我,在这种情况下是 wx.Frame):
def get_metadata(self):
mdDict = dict()
a1 = coremetadata.mdCoreAttribute(0, 'att1', 'cat1', 1, 'core1')
a2 = coremetadata.mdCoreAttribute(1, 'att2', 'cat1', 2, 'core1')
a3 = coremetadata.mdCoreAttribute(2, 'att3', 'cat3', 3, 'core1')
c1 = coremetadata.mdCore('core1')
c1.atts.append(a1)
c1.atts.append(a2)
c1.atts.append(a3)
mdDict['core1'] = c1
return coremetadata.CoreMetaData(mdDict.values())
def createDVTC(self):
self.dvtc = dv.DataViewTreeCtrl(self.grid, wx.ID_ANY, size=(300,300))
mdata = self.get_metadata()
# tell the object to use our data
self.dvtc.AssociateModel(mdata)
return self.dvtc
def create_mdPane(self):
self.dvtc = self.createDVTC()
self._mgr.AddPane(self.dvtc, aui.AuiPaneInfo().
Name("MDNotebook").Caption("Metadata Display").
Right().Layer(1).Position(1).MinimizeButton(True))
感谢您的帮助!
这不是线程问题。这是我对模型的实现。在 GetParent()
和 GetChildren()
函数中 return 适当的数据类型(使用 ObjectToItem()
)必须小心谨慎。
具体来说,我没有在 GetParent()
函数中使用 ObjectToItem()
...
一些非常基本的东西,但是当唯一的反馈是分段错误时,它并不容易找到。