wxFormBuilder с Python: доступ к FlexGridSizer из подкласса
Я строю графический интерфейс в wxFormBuilder и пишу код для него на Python.
Я заметил, что все созданные мной виджеты назначены self
в сгенерированном коде. Например, графический интерфейс с одним фрагментом текста может выглядеть так:
class MyFrame(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self,parent)
self.myStaticText = wx.StaticText(self,wx.ID_ANY,'My Text',0)
Итак, объект myStaticText
становится атрибутом MyFrame
учебный класс. Это хорошо, потому что я могу написать новый класс, который наследует этот класс, а затем выполнять другие функции, такие как обновление myStaticText
объект:
import MyFrmae
class GUI(MyFrame):
def __init_(self,parent):
MyFrame.__init__(self,parent)
def updateText(self):
self.staticText.SetLabel('My Other Text')
Проблема в том, что wxFormBuilder не добавляет self
перед любыми объектами FlexGridSizer. Итак, сгенерированный код выглядит так:
myFlexGridSizer = wx.FlexGridSizer(3,1,0,0)
вместо:
self.myFlexGridSizer = wx.FlexGridSizer(3,1,0,0)
В результате я не могу получить доступ к этому объекту из любого другого класса, что мне действительно нужно сделать.
Так...
- Есть ли способ получить доступ к объекту из другого класса, если у него нет
self
перед ним, даже если я унаследую это напрямую? - Есть ли способ изменить настройку в wxFormBuilder, чтобы он добавлял
self
?
2 ответа
Если я хорошо понимаю, вы хотите получить доступ к FlexGridSizer
что сгенерировал конструктор форм?
Я никогда не использовал wxFormBuilder
но я думаю, что идея в том, что это создает wxFlexGridSizer
, манипулировать им, чтобы сделать макет формы, и вызывает SetSizer
на ваше wxWindow
(или же wxFrame
в вашем случае) и забудьте об этом, потому что расположение больше не изменится.
Один простой вариант (но не самый лучший) - позвонить GetSizer
на вашем кадре, и вы можете получить доступ к wxSizer
оттуда.
Другой вариант - иметь определенный sizer
член в вашем MyFrame, где вы будете хранить wxFlexGridSizer
, но это, вероятно, будет связано с изменением кода, сгенерированного wxFormBuilder
Я попробовал просто вызвать сайзерself.my_sizer
в wxFormBuilder 3.10.1, и сгенерированный код Python в порядке. Я обращаюсь к сайзеру, как и к любому другому члену сгенерированного класса.