Ваш экземпляр класса wx.Frame
не имеет родителя.Вы явно создаете его без одного:
wx.Frame.__init__(self, None, title="Popup Menu")
Вы создаете экземпляр MyForm
в своем блоке __name__ == '__main__'
:
frame = MyForm().Show()
# Note: your name 'frame' holds the return value of the method Show(), i.e. a boolean
# This probably should rather read:
# frame = MyForm()
# frame.Show()
Этот является MyForm
экземпляр, который вы показываете в своем app
.
Что вы здесь делаете:
test = MyForm()
создает новый экземпляр MyFrame
(который не имеет ничего общего стот, который показывает ваше приложение).Затем вы вызываете onUpdate
для этого нового экземпляра вашего MyForm
класса
MyForm.OnUpdate(test,item.GetText())
Так как вы никогда не Show()
этого нового экземпляра, вы не можете увидеть эффект вашегооперация.Тем не менее, вы, вероятно, не хотите / не нуждаетесь в этом новом экземпляре в любом случае.Вам нужен ваш экземпляр из блока main
.
В инициализаторе CheckListCtrl
есть аргумент parent
.Это может содержать цепочку объектов, которые вы, вероятно, сможете поднимать, пока не достигнете своего MyForm
экземпляра.Я не могу сказать наверняка, так как не видно, где и как это называется в ListViewComboPopup
:
def Create(self, parent):
self.lc = CheckListCtrl(parent)
Сделайте print(self.Parent)
в OnCheckItem
, чтобы увидеть, что он содержит, а затемдобавьте еще .Parent
к self.Parent
, пока вы, надеюсь, не получите <__main__.MyForm instance [...]>
.Здесь вы хотите вызвать метод onUpdate
.Это должно выглядеть примерно так:
self.Parent.Parent.Parent.OnUpdate(item.GetText())
# the number of '.Parent' my vary, based on where in the chain you find your MyForm instance
Редактировать
Согласно комментарию ОП, родительский атрибут для wx
объектов пишется с большой буквы P
.Соответствующие фрагменты кода были обновлены соответствующим образом.