Ошибка сегментации Python 11 на Мохаве - PullRequest
1 голос
/ 25 июня 2019

MacOS 10.14.5 (Мохаве)

Python 3.7.3

wxPython 4.0.6

Продолжайте получать сбои с "Ошибка сегментации: 11"

Например, у меня есть приложение, которое отображает wx.RearrangeCtrl. Он отображает и заполняет OK, но Python падает, если я пытаюсь установить флажок или переместить элемент.

Я нашел множество тем на эту тему, но все они ссылаются на гораздо более старые версии, и предлагаемые ими решения не подходят для текущих версий.

Любой совет будет оценен.

Я написал простое приложение для воспроизведения проблемы. Как и прежде, он очищается и изначально работает нормально. Откроется окно, и в поле со списком будут добавлены три элемента. Сбой ошибки сегментации происходит, если я пытаюсь переместить элемент или установить флажок. Это происходит последовательно, каждый раз.

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()

1 Ответ

0 голосов
/ 25 июня 2019

Ваш код также падает в macOS 10.14.4 и Win10.Кажется, проблема в том, что вы должны предоставить список items и order во время создания виджета wx.RearrangeCtrl.

Код ниже теперь отлично работает в обоих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()

На всякий случай, описание для отображения элементов, выбранных или нет, здесь здесь .

...