gpt4 book ai didi

python - 编辑器的 wxPython 段错误

转载 作者:太空宇宙 更新时间:2023-11-03 15:28:30 24 4
gpt4 key购买 nike

我已经用 wx.grid.PyGridTableBase 派生类创建了一个 wx.grid.Grid 来提供它的数据。我还想控制表上使用的编辑器。为此,我定义了以下方法

def GetAttr(self, row, col, kind):
attr = wx.grid.GridCellAttr()
if col == 0:
attr.SetEditor( wx.grid.GridCellChoiceEditor() )
return attr

但是,每当我尝试在网格中创建编辑器时,这都会导致段错误。我确实尝试过事先创建编辑器并将其作为参数传递但收到错误:

    TypeError: in method 'GridCellAttr_SetEditor', expected argument 2 of type 
'wxGridCellEditor *'

我怀疑第二个错误是由 GridCellAttr 取消所有权然后销毁我的编辑器引起的。

我也试过在 wx.grid.Grid 上使用 SetDefaultEditor 方法并且有效,但自然不允许我有特定于列的编辑策略。

查看崩溃程序的完整示例:http://pastebin.com/SEbhvaKf

最佳答案

我发现了问题:

wxWidgets 代码假定相同的编辑器将始终从 GetCellAttr 返回。每次返回不同的编辑器都会导致段错误。

为了多次返回同一个编辑器,我还需要在编辑器上调用 IncRef() 以使其保持事件状态。

对于以后遇到同样问题的其他人,请参阅我的工作代码:

import wx.grid 

app = wx.PySimpleApp()

class Source(wx.grid.PyGridTableBase):
def __init__(self):
super(Source, self).__init__()
self._editor = wx.grid.GridCellChoiceEditor()

def IsEmptyCell(self, row, col):
return False

def GetValue(self, row, col):
return repr( (row, col) )

def SetValue(self, row, col, value):
pass

def GetNumberRows(self):
return 5

def GetNumberCols(self):
return 5

def GetAttr(self, row, col, kind):
attr = wx.grid.GridCellAttr()
self._editor.IncRef()
attr.SetEditor( self._editor )
return attr


frame = wx.Frame(None)
grid = wx.grid.Grid(frame)
grid.SetTable( Source() )
frame.Show()

app.MainLoop()

关于python - 编辑器的 wxPython 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3168971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com