Несколько лет назад я наткнулся на вопрос на популярном сайте StackOverflow. Там спрашивали о том, как динамично уничтожать и создавать панели по прошествии определённого периода времени. Эта идея показалась мне довольно интересной, так что я решил разобраться в вопросе и написать о том, как это сделать.
Всё, что вам нужно – это wx.Timer и объект панели. Для данного фрагмента кода я использовал панель, которая отображает обратный отсчёт посредством виджета wx.StaticText, уничтожает себя, и сразу же заменяется другой панелью.
Давайте посмотрим на код, позволяющий нам реализовать это:
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
import wx class PanelOne(wx.Panel): """""" def __init__(self, parent): """Constructor""" wx.Panel.__init__(self, parent) msg = "This panel will self-destruct in 10 seconds" self.countdown = wx.StaticText(self, label=msg) class PanelTwo(wx.Panel): """""" def __init__(self, parent): """Constructor""" wx.Panel.__init__(self, parent) txt = wx.StaticText(self, label="Panel Two") class MainFrame(wx.Frame): """""" def __init__(self): """Constructor""" wx.Frame.__init__(self, None, title="Panel Smacker") self.panelOne = PanelOne(self) self.time2die = 10 self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.update, self.timer) self.timer.Start(1000) self.sizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.panelOne, 1, wx.EXPAND) self.SetSizer(self.sizer) def update(self, event): """""" if self.time2die < 0: self.panelOne.Destroy() self.panelTwo = PanelTwo(self) self.sizer.Add(self.panelTwo, 1, wx.EXPAND) self.Layout() self.timer.Stop() else: msg = "This panel will self-destruct in %s seconds" % self.time2die self.panelOne.countdown.SetLabel(msg) self.time2die -= 1 if __name__ == "__main__": app = wx.App(False) frame = MainFrame() frame.Show() app.MainLoop() |
Когда вы запустите этот код, то увидите что-то вроде:
Затем она отсчитает 10 секунд, после чего вы должны будете увидеть вот это:
Довольно просто, не правда ли?
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Итоги
Я считаю это отличным упражнением, позволяющим научиться чему-то новому. Также это приложение показывает насколько просто вы можете заменять объекты wx.Panel, когда вам это нужно. На самом деле, переключающиеся панели — это тема, которую мы довольно подробно будем рассматривать в моей следующей статье.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»