Python Mojave 上的分段错误 11
Python segmentation fault 11 on Mojave
MacOS 10.14.5(莫哈韦沙漠)
Python 3.7.3
wxPython 4.0.6
"Segmentation fault: 11"
不断崩溃
例如,我有一个显示 wx.RearrangeCtrl 的应用程序。它显示并填充正常,但如果我尝试选中一个框或移动一个项目,Python 会崩溃。
我发现了很多关于这个主题的帖子,但它们都引用了更旧的版本,并且它们提供的解决方案对当前版本无效。
如有任何建议,我们将不胜感激。
我写了一个简单的应用程序来重现这个问题。和以前一样,它 lints 干净,并且最初运行正常。 window 打开,列表框添加了三个项目。如果我尝试移动一个项目或选中一个框,则会发生分段错误崩溃。这种情况每次都会持续发生。
import wx
class mainFrame(wx.Frame):
def __init__(self, *args, **kw):
super(mainFrame, self).__init__(*args, **kw)
pnl = wx.Panel(self)
mainsizer = wx.BoxSizer(orient=wx.VERTICAL)
self.vlist = wx.RearrangeCtrl(pnl)
self.vlist.Create(pnl, -1, size=(600,400))
mainsizer.Add(self.vlist, 1, wx.EXPAND | wx.ALL, 10)
pnl.SetSizerAndFit(mainsizer)
self.loadList()
def loadList(self):
self.vlist.GetList().Append("first line")
self.vlist.GetList().Append("second line")
self.vlist.GetList().Append("third line")
if __name__ == '__main__':
app = wx.App()
frm = mainFrame(None, title='Crash Test', size=wx.Size(800, 600))
frm.Show()
app.MainLoop()
您的代码在 macOS 10.14.4 和 Win10 中也会崩溃。问题似乎是您必须在创建 wx.RearrangeCtrl
小部件期间提供 items
和 order
的列表。
下面的代码现在可以在 OS.
中正常工作
import wx
class mainFrame(wx.Frame):
def __init__(self, *args, **kw):
super(mainFrame, self).__init__(*args, **kw)
pnl = wx.Panel(self)
mainsizer = wx.BoxSizer(orient=wx.VERTICAL)
items = ['first line', 'second line', 'third line']
order = [0, 1, 2]
self.vlist = wx.RearrangeCtrl(pnl, -1, size=(600, 400), order=order, items=items)
mainsizer.Add(self.vlist, 1, wx.EXPAND | wx.ALL, 10)
pnl.SetSizerAndFit(mainsizer)
if __name__ == '__main__':
app = wx.App()
frm = mainFrame(None, title='Crash Test', size=wx.Size(800, 600))
frm.Show()
app.MainLoop()
为了以防万一,显示项目是否被选中的描述是here。
MacOS 10.14.5(莫哈韦沙漠)
Python 3.7.3
wxPython 4.0.6
"Segmentation fault: 11"
不断崩溃例如,我有一个显示 wx.RearrangeCtrl 的应用程序。它显示并填充正常,但如果我尝试选中一个框或移动一个项目,Python 会崩溃。
我发现了很多关于这个主题的帖子,但它们都引用了更旧的版本,并且它们提供的解决方案对当前版本无效。
如有任何建议,我们将不胜感激。
我写了一个简单的应用程序来重现这个问题。和以前一样,它 lints 干净,并且最初运行正常。 window 打开,列表框添加了三个项目。如果我尝试移动一个项目或选中一个框,则会发生分段错误崩溃。这种情况每次都会持续发生。
import wx
class mainFrame(wx.Frame):
def __init__(self, *args, **kw):
super(mainFrame, self).__init__(*args, **kw)
pnl = wx.Panel(self)
mainsizer = wx.BoxSizer(orient=wx.VERTICAL)
self.vlist = wx.RearrangeCtrl(pnl)
self.vlist.Create(pnl, -1, size=(600,400))
mainsizer.Add(self.vlist, 1, wx.EXPAND | wx.ALL, 10)
pnl.SetSizerAndFit(mainsizer)
self.loadList()
def loadList(self):
self.vlist.GetList().Append("first line")
self.vlist.GetList().Append("second line")
self.vlist.GetList().Append("third line")
if __name__ == '__main__':
app = wx.App()
frm = mainFrame(None, title='Crash Test', size=wx.Size(800, 600))
frm.Show()
app.MainLoop()
您的代码在 macOS 10.14.4 和 Win10 中也会崩溃。问题似乎是您必须在创建 wx.RearrangeCtrl
小部件期间提供 items
和 order
的列表。
下面的代码现在可以在 OS.
中正常工作import wx
class mainFrame(wx.Frame):
def __init__(self, *args, **kw):
super(mainFrame, self).__init__(*args, **kw)
pnl = wx.Panel(self)
mainsizer = wx.BoxSizer(orient=wx.VERTICAL)
items = ['first line', 'second line', 'third line']
order = [0, 1, 2]
self.vlist = wx.RearrangeCtrl(pnl, -1, size=(600, 400), order=order, items=items)
mainsizer.Add(self.vlist, 1, wx.EXPAND | wx.ALL, 10)
pnl.SetSizerAndFit(mainsizer)
if __name__ == '__main__':
app = wx.App()
frm = mainFrame(None, title='Crash Test', size=wx.Size(800, 600))
frm.Show()
app.MainLoop()
为了以防万一,显示项目是否被选中的描述是here。