В этой статье мы узнаем, как получить дочерние виджеты из объекта Sizer. В wxPython, вы скорее всего ожидаете, что речь пойдёт об использовании метода Sizer GetChildren(). Как бы то ни было, он чаще возвращает список объектов SizerItem, чем список самих актуальных виджетов. Вы можете заметить это отличие, когда вызываете метод wx.Panel под названием GetChildren().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import wx class MyApp(wx.Frame): """""" def __init__(self): """Constructor""" title = 'Get Children from Sizer' wx.Frame.__init__(self, None, title=title) panel = wx.Panel(self) lbl = wx.StaticText(panel, label="I'm a label!") txt = wx.TextCtrl(panel, value="blah blah") btn = wx.Button(panel, label="Clear") btn.Bind(wx.EVT_BUTTON, self.onClear) self.sizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(lbl, 0, wx.ALL, 5) self.sizer.Add(txt, 0, wx.ALL, 5) self.sizer.Add(btn, 0, wx.ALL, 5) panel.SetSizer(self.sizer) def onClear(self, event): """ Кнопка хэндлера событий, предназначенная для очистки виджетов TextCtrl """ children = self.sizer.GetChildren() for child in children: widget = child.GetWindow() print widget if isinstance(widget, wx.TextCtrl): widget.Clear() if __name__ == "__main__": app = wx.App(False) frame = MyApp() frame.Show() app.MainLoop() |
Важный фрагмент касается метода onClear. Здесь нам нужно вызвать метод SizerItem, который называется GetWindow(), чтобы вернуть актуальную инстанцию виджета. Как только мы это сделали, мы можем делать с виджетом всё, что угодно, то есть менять ярлык, значение или, как в данном примере, очищать строки с текстом.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
ИТОГИ
Это может быть весьма удобно в случаях, когда вам нужно запускать цикл с несколькими дочерними виджетами, которые нужно скрыть. Или же если вам нужно очистить форму – это, пожалуй, самый простой способ для выполнения данной задачи. Дайте вашим знаниям шанс и поэкспериментируйте немного, чтобы понять, как вы можете внедрить данный метод в ваших приложения.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»