Как добавить иконку в приложение tkinter
Изображение можно добавить с помощью метода PhotoImage() . Это метод Tkinter, который означает, что вам не нужно импортировать любой другой модуль, чтобы использовать его.
Важное замечание: Если на кнопке указаны как изображение, так и текст, текст будет преобладать, и на кнопке будет отображаться только изображение. Но если вы хотите показать как изображение, так и текст, вы должны передать составные в настройках кнопки.
Button(master, text = "Button", image = "image.jpg", compound=LEFT)
compound = LEFT -> image will be at left side of the button
compound = RIGHT -> image will be at right side of button
compound = TOP -> image will be at top of button
compound = BOTTOM -> image will be at bottom of button
Синтаксис:
любой допустимый путь, доступный на вашем локальном компьютере.
Код № 1:
from tkinter import *
from tkinter.ttk import *
Label(root, text = 'GeeksforGeeks' , font = (
'Verdana' , 15 )).pack(side = TOP, pady = 10 )
photo = PhotoImage( file = r "C:\Gfg\circle.jpg" )
Button(root, text = 'Click Me !' , image = photo).pack(side = TOP)
Выход:
При выводе обратите внимание, что на кнопке отображается только изображение, а размер кнопки также больше обычного размера, потому что мы не установили размер изображения.
Код № 2: для отображения как изображения, так и текста на кнопке .
from tkinter import *
from tkinter.ttk import *
Label(root, text = 'GeeksforGeeks' , font = (
'Verdana' , 15 )).pack(side = TOP, pady = 10 )
photo = PhotoImage( file = r "C:\Gfg\circle.jpg" )
photoimage = photo.subsample( 3 , 3 )
Button(root, text = 'Click Me !' , image = photoimage,
compound = LEFT).pack(side = TOP)
Выход:
Обратите внимание, что как текст, так и изображение появляются, а размер изображения также невелик.
Бывают случаи, когда вы хотите добавить что-то необычное в строку заголовка вашего приложения. Лучше всего для этого подойдут изображения. Большинство приложений для Windows имеют лого в верхнем левом углу строки заголовка. Когда вы запускаете wxPython, то он использует стандартную иконку. В данной статье мы рассмотрим три разных метода вставки иконки в строку заголовка.
Извлечение изображения из исполняемого файла
Давайте начнём процесс обучения с извлечения иконки из исполняемого файла. На самом деле, это очень просто. Вот вам мега-простой пример:
wx . Frame . __init__ ( self , None , title = 'Image Extractor' )В этом примере, я извлекаю иконку Python 3.5 из файла python.exe используя следующую строку:
Затем, я задаю рамку используя 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?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Давайте посмотрим на то, как это изменило сам код:
wx . Frame . __init__ ( self , None , title = 'Custom Image' )Перед запуском данного кода, вы должны найти собственную иконку и изменить код таким образом, чтобы она использовалась. Я, например, взял иконку Python которая была у меня на компьютере. Вообще-то это лого фреймворка wxPython, которое вы обнаружите и у себя на компьютере после установки wxPython.
Приложение, сгенерированное данным кодом, имело следующий вид:
Теперь мы можем перейти к последнему способу добавления изображения в строку заголовка.
Создание изображения в коде Python
Последний способ я считаю самым лучшим. Здесь я покажу вам как взять иконку или изображение и превратить его в python-файл используя утилиту wxPython img2py.
С чего бы ему быть лучшим?
Потому, что, вставляя файл изображения в python-файл вы значительно упрощаете процедуру распространения (извлечения) вашего приложения с помощью py2exe. По крайней мере, так было в моём случае.
У меня на компьютере утилита img2py расположена в папке со скриптами Python. Также я нашёл её в Python site-packages под названием site-packageswx-3.0-mswwxtools (измените этот параметр таким образом, чтобы он соответствовал установленной у вас версии wxPython).
Чтобы упростить процесс, я настоятельно рекомендую открыть терминал и указать путь к папке, где расположен файл вашей иконки. После этого, вам останется лишь ввести данную команду:
Первый аргумент для img2py.py это -і, который сообщает утилите, что вы вставляете иконку. Дальше следует путь к файлу иконки. Наконец, вы задаёте название файла, который нужно создать или вставить (например, иконку). Теперь, скопируйте созданный вами python-файл в папку, содержащую ваш скрипт, чтобы тот мог импортировать иконку. Вы можете также перенести код из python-файла в текст приложения, которое вы создаёте.
Обратите внимание: Если вы используете Windows, img2py.exe будет расположена в папке Scripts, которая, в свою очередь, находится в папке, в которую вы установили Python. В противном случае, вам нужно будет пройти в место, где установлен Python, и указать папку tools, чтобы запустить скрипт напрямую.
Кстати, img2py имеет несколько опций командной строки, которые могут вам пригодится. Попробуйте запустить img2py без каких-либо аргументов, чтобы отобразилась главная страница и вы моги ознакомится со всеми доступными командами.
В данном примере я собираюсь импортировать модуль нашего нового изображения. Для получения иконки, вам нужно использовать метод GetIcon() на файле иконки в импортированной мной инстанции PyEmbeddedImage. Чтобы вам было легче понять, что я делаю – просмотрите код, расположенный ниже. Вам, наверное, также хочется открыть сгенерированный мной python-файл, чтобы увидеть, как он выглядит.
Многие программы на сегодняшний день используют графический интерфейс, который более интуитивен и удобен для пользователя, чем консоль. И с помощью языка программирования Python также можно создавать графические программы. Для этого в Python по умолчанию применяется специальный toolkit - набор компонентов, который называется tkinter .
Библиотека tkinter доступна в виде отдельного встроенного модуля, который содержит все необходимые графические компоненты - кнопки, текстовые поля и т.п.
Базовым моментом в построении графических программ является создание окна. Затем в окно добавляются все остальные компоненты графического интерфейса. Поэтому создадим вначале простейшее окно. Для этого определим следующий скрипт:
Для отображения окна надо вызвать у него метод mainloop() , который запускает цикл обработки событий окна для взаимодействия с пользователем.
В результате при запуске скрипта мы увидим такое пустое окошко:
C помощью метода title() можно установить заголовок окна.
С помощью метода geometry() - размер окна. Для установки размера в метод geometry() передается строка в формате «Ширина x Высота». Если при создании окна приложения метод geometry() не вызывается, то окно занимает то пространство, которое необходимо для размещения внутреннего содержимого:
По умолчанию окно позиционируется в верхний левый угол экрана. Но мы можем изменить его положение, передав нужные значения в метод geometry() :
Теперь строка в методе geometry имеет следующий формат: «Ширина x Высота + координатаX + координатаY». То есть при запуске окно будет находиться на 300 пикселей вправо и на 250 пикселей вниз от верхнего левого угла экрана.
Создайте 4 окна с заголовками окон: "Top", "Bottom", "Right", "Left". Разместить окна по сторонам рабочего стола:
- вверх по центру,
- низ по центру,
- право по центру,
- лево по центру.
Создайте 4 окна с заголовками окон: "Top-right", "Top-left", "Bottom-right", "Bottom-left". Разместить 4 окна по углам рабочего стола.
Создайте окно, появляющееся в центре экрана, с заголовком "Center".
Текстовые и другие редакторы в заголовках программы указывают имя "активного файла - название программы".
Иконки окон не отображаются в системах MacOS, задача только для Windows: Найдите в интернете, как в tkinter сменить иконку, отображаемую в левом верхнем углу окна. И замените её, на любую другую иконку, которую можно скопировать из интернета или создать самому. Картинка для иконки обязательно должна иметь расширение .ico .
В этом руководстве мы научимся разрабатывать графические интерфейсы пользователя (GUI), написав несколько примеров GUI на Python с использованием пакета Tkinter.
Пакет Tkinter включен в Python как стандартный, поэтому вам не нужно ничего устанавливать для его использования.
Я предполагаю, что у вас есть некоторые базовые знания Python, которые помогут вам понять, что мы делаем.
Мы начнем с создания окна, затем научимся добавлять виджеты, такие как кнопки, комбобоксы и т.д., а затем поиграем с их свойствами. Итак, поехали.
Создайте свое первое приложение с графическим интерфейсом
Сначала мы импортируем пакет Tkinter, создадим окно и зададим его заголовок:
Невероятно! Наше приложение работает.
Последняя строка вызывает функцию mainloop. Эта функция запускает бесконечный цикл окна, поэтому оно будет открыто, пока мы его сами не закроем.
Если вы забудете вызвать функцию mainloop, пользователю ничего не будет показано.
Создание виджета label
Чтобы добавить метку к нашему предыдущему примеру, мы создадим ее с помощью класса label:
Затем мы установим его положение с помощью функции grid вот так:
Итоговый код будет выглядеть следующим образом:
Без вызова функции grid для label метка не появится.
Установка размера шрифта метки
Вы можете настроить шрифт метки, чтобы сделать его более крупным или, возможно, жирным. Кроме того, можно изменить стиль шрифта.
Для этого передайте дополнительный параметр font:
Следует отметить, что параметр font может быть передан любому виджету для изменения его шрифта, а не только меткам.
Все замечательно. Но окно настолько маленькое, что мы даже не видим заголовок. Как установить размер окна?
Установка размера окна
Мы можем установить размер окна по умолчанию, используя функцию geometry:
Приведенная выше строка устанавливает ширину окна в 350 пикселей и высоту в 200 пикселей.
Давайте попробуем добавить больше виджетов в виде кнопок и посмотрим, как обрабатывать событие нажатия на кнопку.
Добавление виджета кнопки
Давайте начнем с добавления кнопки на окно. Кнопка создается и добавляется так же, как и метка:
В результате код будет выглядеть следующим образом:
Результат будет выглядеть так:
Обратите внимание, что мы размещаем кнопку во втором столбце окна, то есть в столбце 1. Если забыть об этом и поместить кнопку в тот же столбец (в данном случае 0), то будет отображаться только кнопка, так как кнопка будет находиться над меткой.
Изменение цвета фона и шрифта кнопки.
Вы можете изменить цвет текста кнопки или любого другого виджета с помощью свойства fg.
Также с помощью свойства bg можно изменить цвет фона любого виджета.
Сейчас, если вы попытаетесь нажать на кнопку, ничего не произойдет, потому что событие нажатия кнопки еще не задано.
Обработка события нажатия кнопки
Сначала мы напишем функцию, которая должна выполняться при нажатии на кнопку:
Затем мы свяжем её с кнопкой, указав функцию следующим образом:
Обратите внимание, что мы пишем просто clicked, а не clicked() со скобками.
Теперь весь код будет выглядеть следующим образом:
Когда мы жмем на кнопку, то получаем нужный результат:
Ввод данных с помощью класса Entry (текстовое поле Tkinter)
В предыдущих примерах графического интерфейса Python мы рассмотрели, как добавлять простые виджеты. Теперь давайте попробуем получить данные от пользователя, используя класс Tkinter Entry (текстовое поле Tkinter).
Вы можете создать текстовое поле с помощью класса Tkinter Entry следующим образом:
Далее вы можете добавить виджет в окно с помощью функции grid, как и раньше.
Наш код будет выглядеть так::
Результат будет следующим:
Мы можем получить введенный текст с помощью функции get. Затем мы можем добавить его в нашу функцию clicked, например, так:
Запустите приведенный выше код и проверьте результат:
Каждый раз, когда мы запускаем код, мы должны кликнуть на виджет ввода, чтобы установить фокус для написания текста. Давайте попробуем установить фокус автоматически?
Установка фокуса на виджете ввода
Это очень просто, все, что нам нужно сделать, это вызвать функцию focus:
Отключение виджета ввода
Чтобы отключить виджет ввода, можно установить свойство state в значение disabled:
Теперь вы больше не можете вводить никакой текст.
Добавление виджета combobox
Чтобы добавить виджет combobox, можно использовать класс Combobox из библиотеки ttk, как показано ниже:
Затем вы можете добавить значения в список.
Как вы видите, мы добавляем элементы combobox, используя кортеж значений.
Чтобы установить выбранный элемент, можно передать индекс нужного элемента функцию current.
Чтобы получить выбранный элемент, можно использовать функцию get, как показано ниже:
Добавление виджета Checkbutton (Tkinter checkbox)
Чтобы создать виджет Checkbutton, вы можете использовать класс Checkbutton:
Установка состояния Checkbutton
Здесь мы создаем переменную типа BooleanVar, которая не является стандартной переменной Python, это переменная Tkinter. Затем мы передаем его в класс Checkbutton для установки состояния галочки, как показано выше. Вы можете установить булево значение false, чтобы отключить отметку.
Также вы можете использовать IntVar вместо BooleanVar и установить значение 0 или 1.
Добавление виджета radio button
Чтобы их добавить, вы можете использовать класс RadioButton, как показано ниже:
Обратите внимание, что вы должны установить для каждой радиокнопки свое значение, иначе они не будут работать.
Результат выполнения приведенного выше кода выглядит следующим образом:
Кроме того, вы можете установить команду любой из этих радиокнопок на определенную функцию, так что если пользователь нажмет на любую из них, она выполнит код назначенной функции.
Все очень просто!
Получить значение радиокнопки (выбранный вариант)
Чтобы получить текущую выбранную радиокнопку или значение радиокнопки, вы можете передать радиокнопкам параметр variable, а затем взять его значение.
Добавление виджета ScrolledText (Tkinter textarea)
Чтобы добавить виджет ScrolledText, вы можете использовать класс ScrolledText, как показано ниже:
Мы указываем ширину и высоту виджета, иначе он заполнит все окно.
Установка содержимого scrolledtext.
Чтобы задать содержимое у scrolledtext, можно использовать метод insert, как показано ниже:
Удаление/очистка содержимого scrolledtext
Чтобы удалить содержимое виджета с прокруткой текста, можно использовать метод delete, как показано ниже:
Создание MessageBox
Отображение диалоговых окон с вопросами и ответами
Вы также можете проверить, какую кнопку нажал пользователь, используя переменную result.
Единственной функцией, которая возвращает одно из трех значений, является функция askyesnocancel , которая возвращает True, False или None .
Добавление SpinBox (виджет чисел)
Чтобы создать данный виджет, вы можете использовать класс Spinbox, как показано ниже:
Здесь мы создаем виджет Spinbox и передаем параметры from_ и to, чтобы указать диапазон чисел для Spinbox.
Кроме того, вы можете указать ширину виджета с помощью параметра width:
Давайте посмотрим весь пример:
Вы можете указать числа для Spinbox вместо использования всего диапазона, например, так:
В результате виджет Spinbox покажет только 3 числа: 3, 8 и 11.
Установка значения по умолчанию для Spinbox
Чтобы установить значение по умолчанию для Spinbox, вы можете передать его в параметр textvariable, как показано ниже:
Теперь, если вы запустите программу, Spinbox отобразит значение по умолчанию 36.
Добавление виджета Progressbar
Чтобы создать прогресс-бар, вы можете использовать класс progressbar, как показано ниже:
Значение шкалы можно задать следующим образом:
Вы можете установить это значение в соответствии с нужным вам процессом, например, загрузкой файла или выполнением задачи.
Изменение цвета Progressbar
Изменение цвета прогрессбара сначала кажется немного сложным, но на самом деле это очень просто.
Посмотрите следующий пример:
Результат будет выглядеть так:
Окно добавления файла (выбор файла и каталога).
Для создания такого окна вы можете использовать класс filedialog, как показано ниже:
После выбора файла и нажатия кнопки открыть, в переменной будет указан путь к файлу.
Вы также можете выбрать несколько файлов:
Указание типов файлов (фильтр по расширению)
Вы можете указать типы файлов с помощью параметра filetypes, который задает расширение в кортежах.
Директорию можно получить с помощью метода askdirectory:
Вы можете указать начальный каталог, указав initialdir:
Добавление меню
Чтобы добавить меню, вы можете использовать класс menu:
Сначала мы создадим меню. Затем мы добавляем нашу первую метку. После этого мы назначаем меню окну.
Вы можете добавить пункты в любое меню с помощью функции add_cascade(), например, так:
Наш код будет выглядеть так:
Вы можете добавить столько пунктов, сколько захотите.
Вы можете отключить пунктирную линию в верхней части выпадающего списка:
Вы можете написать любой код, который срабатывает при нажатии пользователем на любой пункт меню, указав свойство command.
Добавление виджета Notebook (элемент управления вкладками)
Чтобы создать блок управления вкладками, необходимо выполнить три шага.
- Сначала создадим блок управления вкладками с помощью класса Notebook
- Создадим вкладку с помощью класса Frame.
- Добавим вкладку в блок управления вкладками.
- Расположим блок управления вкладками так, чтобы он отображался в окне.
Вы можете добавить столько вкладок, сколько захотите.
Добавление виджетов на вкладки
После создания вкладок вы можете разместить виджеты внутри них, назначив родительское свойство нужной вкладке.
Добавление отступов у виджетов (spacing или padding)
Вы можете добавить отступы элементам, чтобы они выглядели красиво скомпонованными, используя свойства padx и pady.
Просто передайте padx и pady любому виджету и присвойте им значение.
В этом руководстве мы рассмотрели множество примеров графических интерфейсов Python, использующих библиотеку Tkinter, и увидели, насколько просто разрабатывать GUI с ее помощью.
Надеюсь, эти примеры будут вам полезны.
Сохраните статью в социальных сетях, чтобы не потерять.Похожие записи
Сравнивать даты в Python очень просто. Для этого достаточно использовать операторы сравнения. В этой статье…
В этой статье о Python мы рассмотрим, как получить наименьшее общее кратное (НОК) двух чисел.…
Читайте также: