На самой заре развития интернета, многие веб-сайты использовали баннеры с мигающими надписями, которые были призваны привлекать внимание посетителей. Во времена, когда я был разработчиком, мне даже пришлось сделать один такой в моём приложении. Некоторые заказчики до сих пор хотят мерцающие надписи в своих программах. Так что в данной статье, я научу вас как это делается.
Создаём мигающий текст
В нашем первом примере мы сделаем именно так, как задумано, то есть текст будет менять свой цвет «рандомно». Давайте взглянем:
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 random import time import wx class MyPanel(wx.Panel): """""" def __init__(self, parent): """Constructor""" wx.Panel.__init__(self, parent) self.font = wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL) self.label = "I flash a LOT!" self.flashingText = wx.StaticText(self, label=self.label) self.flashingText.SetFont(self.font) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.update, self.timer) self.timer.Start(1000) def update(self, event): """""" colors = ["blue", "green", "red", "yellow"] self.flashingText.SetLabel(self.label) self.flashingText.SetForegroundColour(random.choice(colors)) class MyFrame(wx.Frame): """""" def __init__(self): """Constructor""" wx.Frame.__init__(self, None, title="Flashing text!") panel = MyPanel(self) self.Show() if __name__ == "__main__": app = wx.App(False) frame = MyFrame() app.MainLoop() |
Проще говоря, всё, что вам нужно – это инстанция wx.StaticText и таймер wx.Timer. В нашем примере текст будет мигать ежесекундно, каждый раз меняя цвет.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Примечание: метод SetForegroundColour не работает во всех виджетах на всех платформах в качестве нейтив-виджета, а на некоторых платформах данный виджет вовсе не применяется.
Создаём мерцающий текст
Некоторые разработчики хотят придать шика своим приложениям, добавляя в них текст, который изменяется, как будто мерцая. Давайте изменим предыдущий пример так, чтобы это пожелание реализовывалось.
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 |
import random import time import wx class MyPanel(wx.Panel): """""" def __init__(self, parent): """Constructor""" wx.Panel.__init__(self, parent) self.font = wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL) self.flashingText = wx.StaticText(self, label="I flash a LOT!") self.flashingText.SetFont(self.font) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.update, self.timer) self.timer.Start(1000) def update(self, event): """""" now = int(time.time()) mod = now % 2 print (now) print (mod) if mod: self.flashingText.SetLabel("Current time: %i" % now) else: self.flashingText.SetLabel("Oops! It's mod zero time!") colors = ["blue", "green", "red", "yellow"] self.flashingText.SetForegroundColour(random.choice(colors)) class MyFrame(wx.Frame): """""" def __init__(self): """Constructor""" wx.Frame.__init__(self, None, title="Flashing text!") panel = MyPanel(self) self.Show() if __name__ == "__main__": app = wx.App(False) frame = MyFrame() app.MainLoop() |
Здесь мы просто используем оператор модулей Python для определения того, какой текст изменять и как. Как бы то ни было, вы можете создать список возможных текстовых стрингов и использовать модуль random, чтобы выбрать какой-то из них, или же запустить цикл последовательных изменений.
Итоги
Теперь у вас в арсенале появился трюк, которым вы сможете удивить своих олдскульных менеджеров или боссов. Вы также можете применить техники, о которых я рассказываю в этой статье, в абсолютно другом направлении. Это, пожалуй, не самая интересная возможность, но знания о том, как более эффективно можно использовать wx.Timer, явно вам пригодятся.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»