- How to add background image in Python Tkinter
- Add a background image using PhotoImage()
- Add a background image using create_image()
- Как поставить фоновое изображение на приложение — wxPython #4
- Плохой пример
- Финальное решение
- Итоги
- Tkinter Window Background Color
- Examples
- 1. Change background color using configure method
- 2. Change background color using bg property
- 3. Using background for bg
- 4. Using HEX code for background color
- Summary
How to add background image in Python Tkinter
In this post, you will learn how to add a background image in Python Tkinter.
Tkinter is a standard cross-platform package for creating graphical user interfaces (GUIs). It is also called the Tk interface. It is an original GUI library for Tcl (Tool Command Language). Tkinter comes pre-installed with Python. The greatest strength of Tkinter is its simplicity. There are different ways to add a background image. But always, a label widget is used to set the background.
Add a background image using PhotoImage()
The PhotoImage class is used to display images in labels, buttons, canvases, and text widgets, which are present in the tkinter package. This function takes a file path as an argument and returns the image object. We can place the geometry manager that allows users to put the widget anywhere on the screen by providing x & y coordinates. The following code demonstrates this-
from tkinter import * from PIL import ImageTk, Image app = Tk() app.title("Welcome") img =Image.open('C:\\Python37\\scripts\\projects\\kittens.jpg') bg = ImageTk.PhotoImage(img) app.geometry("650x450") # Add image label = Label(app, image=bg) label.place(x = 0,y = 0) # Add text label2 = Label(app, text = "Hello kittens", font=("Times New Roman", 24)) label2.pack(pady = 50) # Execute tkinter app.mainloop()
Output of the above code:
Add a background image using create_image()
In the given example, we have added a background image using the create_image() method in the canvas widget. The Canvas is a rectangular area planned for drawing pictures or other complex layouts. We can put graphics, text, widgets, or frames on a Canvas. The create_image() method of Canvas is used to draw an image on a canvas. The create_image() function doesn’t accept an image directly. It uses an object that is created by the PhotoImage() method.
The process of adding a background image in Python Tkinter using the Canvas is almost the same as the above. First, we added the image file, then created a canvas and set the width and height. Then we have displayed the image using the create_image() function and set the text using the create_text() function.
#Import the required library from tkinter import * from PIL import Image, ImageTk from tkinter import ttk # Create object root = Tk() # Define the geometry of the window root.geometry("500x450") # Add the image file bg = ImageTk.PhotoImage(file="C:\\Python37\\scripts\\projects\\natural_img1.png") # Create a canvas canvas = Canvas(root,width= 400, height= 300) canvas.pack(fill= "both", expand=True) # Display image canvas.create_image(0, 0, image=bg, anchor="nw") # Add a text in canvas canvas.create_text(250,250,text="Good Morning!", font=("Times New Roman", 24)) # Execute tkinter root.mainloop()
Output of the above code:
Как поставить фоновое изображение на приложение — wxPython #4
Я получаю очень много электронных писем от людей, изучающих Python и wxPython. В одном из них меня попросили рассказать, как создать интерфейс, в котором фоновое изображение на панели будет размещено под кнопками с помощью Tkinter или wxPython. Сначала я проверил возможно ли это в Tkinter и выяснил, что виджет PhotoImage поддерживает только два формата: gif и pgm (по крайней мере пока я не установил Python Imaging Library). Поэтому, я решил дать wxPython шанс. И вот, что у меня получилось.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Плохой пример
Погуглив немного, я нашёл способ в одном из постов на форуме. Он показался мне вполне рабочим. Я воспроизведу для вас один из вариантов его использования ниже:
Первой моей мыслью, когда я увидел это было: «Это наверняка будет выглядеть плохо». Почему я так решил?
Что же, парень, который запостил это использовал wx.StaticBitmap в качестве родителя для кнопки. Виджет StaticBitmap НЕ является контейнером, как тот же виджет Panel или Frame, поэтом я решил, его использование не будет хорошей идеей.
Я спросил Роберта Дана используя IRC канал #wxPython, о том, что он думает по поводу этой ситуации. Он сказал, что, если бы я сделал так, как показано на примере выше, у меня скорей всего появились бы проблемы со смещением и прочим, и порекомендовал мне использовать EVT_ERASE_BACKGROUND с элементами простого рисования. Учитывая то, что Роберт Дан создал wxPython, я последовал его совету и отказался от этого прошлого варианта.
Примечание: Когда я запустил этот код на Windows 7 с помощью wxPython Phoenix, у меня были жёсткие проблемы с тем, чтобы нарисовать виджет, а также с тем, чтобы отменить этот процесс. Так что используйте данный метод на свой страх и риск!
Финальное решение
Следуя указаниям Роберта Дана, я дополнил этот код:
Вот пример скриншота того, как я сделал фоновым изображением фото большого кота, сделанное мной прошлым летом.
Главный фрагмент кода, на который стоит обратить внимание:
Я копировал его из демо-версии ColourDB.py, которое доступно в демо-версии wxPython и слегка дополнил, чтобы он работал в моём приложении. Проще говоря, вы биндите панельEVT_ERASE_BACKGROUND и в этом хендлере, вы захватываете контекст устройства (DC), который в данном случае является панелью (я так думаю). Я называю это методом Clear, так как в моём настоящем приложении я использовал изображение с применением прозрачности, таким образом позволяя фону проступать.
Очистив его, я избавился от подтёков. Как бы то ни было, проверяем, существует ли DC или он пуст (так как я не уверен в этом до конца), и, если же нет – обновляет область (или так называемую «грязную зону» — часть изображения, которая пропадает после того, как на окно приложения накладывается другое). Затем я захватил своё изображение и использовал DrawBitmap, чтобы применить его в качестве фона. Это выглядит забавно, и я сам до конца не понимаю, что происходит, но это работает.
Не стесняйтесь попробовать оба и выяснить какой именно метод подходит именно вам. Он похож на метод Робина Дана, в котором он использует DC, но не тот же его тип, который использовал я.
Итоги
Теперь вы получили все необходимые знания для того, чтобы добавить фоновое изображение на панель приложения. Я замечаю, что люди постоянно спрашивают о том, как это сделать, поэтому считаю данную тему очень важной. Вы можете использовать эти знания для создания Splash Screen. Несмотря ни на что, поиграйте с этим кодом сами, вдруг вы найдёте способ получше.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»
Tkinter Window Background Color
The default background color of a GUI with Tkinter is grey. You can change that to any color based on your application’s requirement.
In this tutorial, we will learn how to change the background color of Tkinter window.
There are two ways through which you can change the background color of window in Tkinter. They are:
- using configure(bg=») method of tkinter.Tk class. or
- directly set the property bg of tkinter.Tk.
In both of the above said cases, set bg property with a valid color value. You can either provide a valid color name or a 6-digit hex value with # preceding the value, as a string.
Examples
1. Change background color using configure method
In this example, we will change the Tkinter window’s background color to blue.
Python Program
from tkinter import * gui = Tk(className='Python Examples - Window Color') # set window size gui.geometry("400x200") #set window color gui.configure(bg='blue') gui.mainloop()
2. Change background color using bg property
In this example, we will change the Tkinter window’s background color to blue.
Python Program
from tkinter import * gui = Tk(className='Python Examples - Window Color') # set window size gui.geometry("400x200") #set window color gui['bg']='green' gui.mainloop()
3. Using background for bg
You can use the property name bg as in the above two examples, or also use the full form background. In this example, we will use the full form background to set the background color of Tkinter window.
Python Program
from tkinter import * gui = Tk(className='Python Examples - Window Color') # set window size gui.geometry("400x200") #set window color gui['background']='yellow' #gui.configure(background='yellow') gui.mainloop()
4. Using HEX code for background color
As already mentioned during the start, you can provide a HEX equivalent value for a color. In this example, we provide a HEX value to color and check the output.
Python Program
from tkinter import * gui = Tk(className='Python Examples - Window Color') # set window size gui.geometry("400x200") #set window color gui['background']='#856ff8' gui.mainloop()
Summary
In this tutorial of Python Examples, we learned how to change the background color of Tkinter GUI window, with the help of well detailed Python example programs.