Бывают случаи, когда вы хотите добавить что-то необычное в строку заголовка вашего приложения. Лучше всего для этого подойдут изображения. Большинство приложений для Windows имеют лого в верхнем левом углу строки заголовка. Когда вы запускаете wxPython, то он использует стандартную иконку. В данной статье мы рассмотрим три разных метода вставки иконки в строку заголовка.
Извлечение изображения из исполняемого файла
Давайте начнём процесс обучения с извлечения иконки из исполняемого файла. На самом деле, это очень просто. Вот вам мега-простой пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import wx class MyForm(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, title='Image Extractor') self.panel = wx.Panel(self) loc = wx.IconLocation(r'C:\Python35\python.exe', 0) self.SetIcon(wx.Icon(loc)) if __name__ == '__main__': app = wx.App(False) frame = MyForm().Show() app.MainLoop() |
В этом примере, я извлекаю иконку Python 3.5 из файла python.exe используя следующую строку:
1 |
loc = wx.Icon(r'C:\Python27\python.exe', 0) |
Затем, я задаю рамку используя SetIcon(). Обратите внимание, что нам нужно всего лишь извлечь иконку из инстанции IconLocation. Если вы пользуетесь wxPython Classic, вам нужно будет заменить обращение к wx.Icon на wx.IconFromLocation.
Когда вы запустите код, вы должны увидеть следующее:
Вы заметите, что в верхнем левом углу данного скриншота появилось лого Python. А теперь попробуйте отредактировать две последние строки класса методом __init__ и перезапустите код. Вы должны будете увидеть что-то вроде этого:
В верхнем левом углу вы увидите стандартное изображение, которое wxPython использует, когда вы не задали иконку самостоятельно.
Использование собственной иконки
Использование вашего собственного изображения, на самом деле, выполнить проще, чем извлечение из exe файла. Основным отличием предыдущего кода от следующего является то, что я избавился от обращения к wx.IconLocation и wx.IconFromLocation, а также добавил объект wx.Icon. Объекту wx.Icon нужны только путь к расположению иконки и флаг wx.BITMAP_TYPE_ICO.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Давайте посмотрим на то, как это изменило сам код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import wx class MyForm(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, title='Custom Image') self.panel = wx.Panel(self, wx.ID_ANY) ico = wx.Icon('py.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(ico) if __name__ == '__main__': app = wx.App(False) frame = MyForm().Show() app.MainLoop() |
Перед запуском данного кода, вы должны найти собственную иконку и изменить код таким образом, чтобы она использовалась. Я, например, взял иконку Python которая была у меня на компьютере. Вообще-то это лого фреймворка wxPython, которое вы обнаружите и у себя на компьютере после установки wxPython.
Приложение, сгенерированное данным кодом, имело следующий вид:
Теперь мы можем перейти к последнему способу добавления изображения в строку заголовка.
Создание изображения в коде Python
Последний способ я считаю самым лучшим. Здесь я покажу вам как взять иконку или изображение и превратить его в python-файл используя утилиту wxPython img2py.
С чего бы ему быть лучшим?
Потому, что, вставляя файл изображения в python-файл вы значительно упрощаете процедуру распространения (извлечения) вашего приложения с помощью py2exe. По крайней мере, так было в моём случае.
У меня на компьютере утилита img2py расположена в папке со скриптами Python. Также я нашёл её в Python site-packages под названием site-packageswx-3.0-mswwxtools (измените этот параметр таким образом, чтобы он соответствовал установленной у вас версии wxPython).
Чтобы упростить процесс, я настоятельно рекомендую открыть терминал и указать путь к папке, где расположен файл вашей иконки. После этого, вам останется лишь ввести данную команду:
1 |
img2py python.ico my_icon.py |
Первый аргумент для img2py.py это -і, который сообщает утилите, что вы вставляете иконку. Дальше следует путь к файлу иконки. Наконец, вы задаёте название файла, который нужно создать или вставить (например, иконку). Теперь, скопируйте созданный вами python-файл в папку, содержащую ваш скрипт, чтобы тот мог импортировать иконку. Вы можете также перенести код из python-файла в текст приложения, которое вы создаёте.
Обратите внимание: Если вы используете Windows, img2py.exe будет расположена в папке Scripts, которая, в свою очередь, находится в папке, в которую вы установили Python. В противном случае, вам нужно будет пройти в место, где установлен Python, и указать папку tools, чтобы запустить скрипт напрямую.
Кстати, img2py имеет несколько опций командной строки, которые могут вам пригодится. Попробуйте запустить img2py без каких-либо аргументов, чтобы отобразилась главная страница и вы моги ознакомится со всеми доступными командами.
В данном примере я собираюсь импортировать модуль нашего нового изображения. Для получения иконки, вам нужно использовать метод GetIcon() на файле иконки в импортированной мной инстанции PyEmbeddedImage. Чтобы вам было легче понять, что я делаю – просмотрите код, расположенный ниже. Вам, наверное, также хочется открыть сгенерированный мной python-файл, чтобы увидеть, как он выглядит.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import wx import my_icon class MyForm(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, title='Python Image Title') self.panel = wx.Panel(self, wx.ID_ANY) ico = my_icon.python.GetIcon() self.SetIcon(ico) # Запустите программу if __name__ == '__main__': app = wx.App(False) frame = MyForm().Show() app.MainLoop() |
Приложение, созданное этим кодом должно выглядеть также, как то, что мы создали ранее. Единственным отличием является текст заголовка.
Подведем итоги
Надеюсь, что данная статья научила вас вставлять иконку в строку заголовка вашего приложения. Помните, что вы можете использовать данную технику для любого изображения, которое вы хотите вставить в своё приложение, а не только для иконки в командной строке. Также этот метод подойдёт для вставки иконки в панель задач или же панель инструментов. Удачи!
Продолжение
Следующий урок №4: Как поставить фоновое изображение на приложение
Предыдущий урок №2: Как сделать скриншот вашего приложения
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»