Невозможно редактировать TextCtrl, созданный из другой функции, кроме __init__ (wxPython)

У меня проблемы с редактированием, вводом или даже щелчком TextCtrl или любого другого виджета, который не встроен в функцию init.

Допустим, у меня есть этот бит:

class firstpanel(wx.Panel):

def __init__(self, parent):
    wx.Panel.__init__(self, parent=parent)

....

def receivetext(self, event):
    panel = wx.Panel(self,size=wx.Size(850,650))
    wx.TextCtrl(self, -1, self.textfromsomewhereelse, (365, 145))

Я вижу TextCtrl с соответствующим значением в моем графическом интерфейсе, но не могу его изменить. Это как будто у меня есть невидимый слой над ним, который не пропускает меня.

Я говорю, что мне не хватает чего-то очень простого, и это очень смущает

1 ответ

Решение

В receivetext вы создаете экземпляр wx.TextCtrl, но вы не добавите его в panel, Вы также не сохраняете ссылку на экземпляр, поэтому он будет немедленно уничтожен сборщиком мусора.

class MyFrame1 (wx.Frame):
    def __init__(self):
        super(MyFrame1, self).__init__()
        fluid_sizer = wx.BoxSizer(wx.HORIZONTAL)
        self.m_textCtrl1 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
        fluid_sizer.Add(self.m_textCtrl1, 0, wx.ALL, 5)
        self.SetSizer(fluid_sizer)
        self.Layout()

Пример показывает, что wx.BoxSizer был создан и wx.TextCtrl, Ссылка на текстовый элемент управления сохраняется как self.m_textCtrl, Затем текстовый элемент управления добавляется в сортировщик, что делает его видимым.

Другие вопросы по тегам