19
#import statements
from Tkinter import *
import tkMessageBox
import tkFont
from PIL import ImageTk,Image

Code to import image:

app = Tk()
app.title("Welcome")
image2 =Image.open('C:\\Users\\adminp\\Desktop\\titlepage\\front.gif')
image1 = ImageTk.PhotoImage(image2)
w = image1.width()
h = image1.height()
app.geometry('%dx%d+0+0' % (w,h))
#app.configure(background='C:\\Usfront.png')
#app.configure(background = image1)

labelText = StringVar()
labelText.set("Welcome !!!!")
#labelText.fontsize('10')

label1 = Label(app, image=image1, textvariable=labelText,
               font=("Times New Roman", 24),
               justify=CENTER, height=4, fg="blue")
label1.pack()

app.mainloop()

This code doesn't work. I want to import a background image.

vvvvv
  • 25,404
  • 19
  • 49
  • 81
user1276381
  • 319
  • 1
  • 4
  • 11
  • Does your label show the "Wecome !!!!" text if you remove the image attribute? i.e. `Label(app, textvariable=labelText, ...)` This text would not show up of the image was showing up, since the image attribute takes precedence over textvariable. – gary Apr 15 '12 at 01:14
  • 3
    I will send a proposal to SO for deprecation of the term "not working". It lost any useful meaning the very first day it was born. Seriously, try to describe **why** you think it is not working. – joaquin Apr 15 '12 at 07:39
  • Deleted my answer since it wasn't answering your actual question. You should edit your post to make it more specific. I'd also use the link you posted in your comment to formulate an answer for this question. (It's perfectly fine to answer your own questions here.) – gary Apr 15 '12 at 17:50

3 Answers3

37

One simple method is to use place to use an image as a background image. This is the type of thing that place is really good at doing.

For example:

background_image=tk.PhotoImage(...)
background_label = tk.Label(parent, image=background_image)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

You can then grid or pack other widgets in the parent as normal. Just make sure you create the background label first so it has a lower stacking order.

Note: if you are doing this inside a function, make sure you keep a reference to the image, otherwise the image will be destroyed by the garbage collector when the function returns. A common technique is to add a reference as an attribute of the label object:

background_label.image = background_image
Bryan Oakley
  • 370,779
  • 53
  • 539
  • 685
  • 2
    Thanks for this, Bryan. To get it to work on my program I had to add the line `background_label.photo=background` before the last line. – town_math Feb 27 '14 at 19:50
  • How do I add background image with a text overlay? – the_prole Nov 16 '14 at 19:21
  • @PSSolanki: I don't know what you mean by tcl/tk not being a good friend with bg images. It's true that it doesn't automatically resize them, but the technique in this answer is still the best way to add a background image to a widget. – Bryan Oakley Aug 12 '21 at 06:03
  • @bryanoakley thanks for answering the question :) Appreciate it. – P S Solanki Aug 12 '21 at 09:43
5

A simple tkinter code for Python 3 for setting background image .

from tkinter import *
from tkinter import messagebox
top = Tk()

C = Canvas(top, bg="blue", height=250, width=300)
filename = PhotoImage(file = "C:\\Users\\location\\imageName.png")
background_label = Label(top, image=filename)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

C.pack()
top.mainloop
-1

You can use this:

root.configure(background='your colour')

Example:-

import tkinter
root=tkiner.Tk()
root.configure(background='pink')
imxitiz
  • 3,920
  • 3
  • 9
  • 33
SIDDARTHA
  • 23
  • 1