Попытка создать экземпляр wx.HeaderCtrl и получить незнакомую ошибку - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь создать объект wx.HeaderCtrl и получаю сообщение об ошибке, которое не смог найти в Google. Это код:

import wx

class MyApp(wx.App):
    def __init__(self):
        super().__init__()
        self.frame = MyFrame(parent=None, title="Configuration")
        self.frame.Show()

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super().__init__(parent, title=title, size=(1600, 800))
        self.configpanel = MyPanel(self)

class MyPanel(wx.Panel):
    def __init__(self, parent):
        super().__init__(parent)

        foo = MyHeaderCtrl(self)
        foo.Create(self)

class MyHeaderCtrl(wx.HeaderCtrl):
    def __init__(self, parent):
        super().__init__(parent)

if __name__ == "__main__":
    app = MyApp()
    app.MainLoop()

Моя проблема в классе My Panel, где я пытаюсь создать экземпляр объекта HeaderCtrl foo, а затем создать его. Независимо от того, как я их организовал, или какое окно или панель я установил в качестве родителя Create, я получаю эту ошибку:

Traceback (последний вызов был последним):

File «C: / _ Код / Проекты / Личные / BigOlTimeline / Python / test.py», строка 32, в приложении = MyApp ()

Файл »C: / _ Код / Проекты / Личные / BigOlTimeline /Python/test.py ", строка 7, в init self.frame = MyFrame (parent = None, title =" Configuration ")

Файл" C: / _ Code / Проекты / Личные / BigOlTimeline / Python / test.py ", строка 14, в init self.configpanel = MyPanel (self)

Файл" C: / _ Код / Проекты / Личные /BigOlTimeline/Python/test.py ", строка 22, в init foo = MyHeaderCtrl (self) .Create (wx.Window ())

wx._core.wxAssertionError: утверждение C ++ ""! m_hWnd "" не удалось в .... \ src \ msw \ window. cpp (3971) в wxWindow :: MSWCreate (): окно не может быть воссоздано

Процесс завершен с кодом завершения -1073741819 (0xC0000005)

Это мои первые t введение в реализацию абстрактных классов и необходимость использовать отдельный Create () вместо просто init , так что я уверен, что это что-то простое, но у меня было много проблем с поиском чего-то подобного в Интернете. Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 07 марта 2020

В wxWidgets вы не можете вызвать Create(), если вы уже создали окно, используя его конструктор не по умолчанию. В своем коде вы уже создаете окно, вызывая его __init__ в своей собственной версии, поэтому вы не должны вызывать Create() позже - просто удалите эту строку, чтобы решить проблему.

...