背景:
在使用wx.grid.Grid类中的函数SetTable去创建表格视图时,主窗口出现,但不显示表格,约一秒后主窗口退出,终端报Process finished with exit code -1073740771 (0xC000041D)
解决:
使用SetTable()函数时,默认参数takeOwnership应改为True
class SimpleGrid(wx.grid.Grid):
def __init__(self,parent):
wx.grid.Grid.__init__(self,parent, -1)
# 实例化
demo = LineupTable()
# PyGridTableBase对于网格是一个模型类,使用类中的方法SetTable来绘制表格
self.SetTable(demo, takeOwnership=False) #takeOwnership参数必须为True否则报0xC000041D
# 调用函数
tmp = demo.GetValue(3,1)
print(tmp)
原因:
暂没看到很好的解释,大概是权限不够(?)
附:使用wx.grid.Grid创建表格的完整运行代码
import wx
import wx.grid
class LineupTable(wx.grid.PyGridTableBase):
data = (("CF", "Bob", "Dernier"), ("2B", "Ryne", "Sandberg"),
("LF", "Gary", "Matthews"), ("1B", "Leon", "Durham"),
("RF", "Keith", "Moreland"), ("3B", "Ron", "Cey"),
("C", "Jody", "Davis"), ("SS", "Larry", "Bowa"),
("P", "Rick", "Sutcliffe"))
colLabels = ("Last","First")
def __init__(self):
wx.grid.PyGridTableBase.__init__(self)
def GetNumberRows(self):
return len(self.data)
def GetNumberCols(self):
return len(self.data[0])
def IsEmptyCell(self,row,col):
return False
def GetValue(self,row,col):
return self.data[row][col]
# 只读模式下仍必须包含SetValue函数
def SetValue(self,row,col,value):
pass
def GetColLableValue(self,col):
return self.colLabels[col]
def GetRowLableValue(self,row):
return self.data[row][0]
class SimpleGrid(wx.grid.Grid):
def __init__(self,parent):
wx.grid.Grid.__init__(self,parent, -1)
# 实例化
demo = LineupTable()
# PyGridTableBase对于网格是一个模型类,使用类中的方法SetTable来绘制表格
self.SetTable(demo, takeOwnership=True) #takeOwnership参数必须为True否则报0xC000041D
# 调用函数
tmp = demo.GetValue(3,1)
print(tmp)
class MyFrame(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self,None,-1,"PyGridTableBase_test1",wx.DefaultPosition,wx.DefaultSize)
grid = SimpleGrid(self)
class MyApp(wx.App):
def __init__(self):
wx.App.__init__(self)
def OnInit(self):
self.frame = MyFrame(None)
self.frame.Show()
self.SetTopWindow(self.frame)
return True # mandatory,否则报a 'bool' is expected not 'NoneType'
def main():
app = MyApp()
app.MainLoop()
if __name__ == '__main__':
main()