How can I put an image as a background on tkinter? - python

To change things up, I wanted to put blue wallpaper image as my background on my python script. Here is the code:
from tkinter import *
root = Tk()
root.title("")
root.iconbitmap()
#root.minsize(width=1370, height=800)
#root.maxsize(width=1370, height=800)
background = PhotoImage(file="background.jpeg")
background_label = Label(root,image=background)
background_label.place(x=0,y=0,relwidth=1,relheight=1)
root.mainloop()
However, when I run this code this error pops up:
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py", line 4061, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py", line 4006, in __init__
self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't recognize data in image file "background.jpeg"
Does anyone know how to solve this problem?

You Can Use ImageTk:
from PIL import ImageTk
from tkinter import *
root = Tk()
root.title("")
root.iconbitmap()
background = ImageTk.PhotoImage(file="background.jpeg")
background_label = Label(root,image=background)
background_label.place(x=0,y=0,relwidth=1,relheight=1)
root.mainloop()
Hope It Helps :D

Related

Python tkinter giving me an error when I try to set me logo (GUI WINDOW)

When I try to add an image and set it as my GUI window logo it gives me these errors
Traceback (most recent call last):
File "C:\Users\Meina Jia\PycharmProjects\guwindow\main.py", line 7, in <module>
icon = PhotoImage(file='logo.jpg')
File "C:\Users\Meina Jia\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 4093, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "C:\Users\Meina Jia\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 4038, in __init__
self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't recognize data in image file "logo.jpg"
Process finished with exit code 1
I already changed the file type using code.
from tkinter import *
window = Tk()
window.geometry("420x420")
window.title("Backrooms in A Nutshell")
icon = PhotoImage(file='logo.jpg')
window.iconphoto(True, icon)
window.mainloop()
For this, you will need the Pillow Library.
import tkinter as tk
from PIL import ImageTk, Image
window = tk.Tk()
window.geometry("420x420")
window.title("Backrooms in A Nutshell")
icon = ImageTk.PhotoImage(Image.open('logo.jpg'))
window.iconphoto(True, icon)
window.mainloop()
Note: It is good practice to import a library directly:
Run
import tkinter
instead of
from tkinter import *

Cannot open image in window

I'm doing with tutorial on youtube in this Python Course at 6:23:00 for him is working I don't know what to do.
Code:
from tkinter import *
#label = an area widget that holds text and/or an image within a window
window = Tk()
photo = PhotoImage(file='C:\\Users\\Kuba\\Desktop\\folder\\images\\3x')
label = Label(window, text='something', font=('Arial',30,'bold'), fg='#00FF00',
bg='black', bd=10, relied=RAISED, padx=20,pady=20, image=photo)
label.pack()
#label.place(x = 0,y= 0)
window.mainloop()
Result:
Traceback (most recent call last):
File "c:\\Users\\Kuba\\Desktop\\folder\\programowanie\\nauka programowania python\\nauka po angielsku\\nauka66.py", line 8, in \<module\>
photo = PhotoImage(file='C:\\Users\\Kuba\\Desktop\\folder\\images\\3x')
File "C:\\Users\\Kuba\\AppData\\Local\\Programs\\Python\\Python310\\lib\\tkinter\__init_\_.py", line 4093, in __init__
Image.__init__(self, 'photo', name, cnf, master, \*\*kw)
File "C:\\Users\\Kuba\\AppData\\Local\\Programs\\Python\\Python310\\lib\\tkinter\__init_\_.py", line 4038, in __init__
self.tk.call(('image', 'create', imgtype, name,) + options)
\_tkinter.TclError: couldn't open "C:\\Users\\Kuba\\Desktop\\folder\\images\\3x": no such file or directory
As the error implies "C:\Users\Kuba\Desktop\folder\images\3x": no such file or directory, you either do not have the image or made a typo in the directory. you can change it manually using file explorer to make sure your photo exists in the directory you entered.

How to place a jpeg into tkinter (python3.4)?

I am trying to make a tkinter code that can generate a window with an image on it. This is the area that keeps giving me an error:
window=tk.Tk()
window.geometry('1100x900')
window.title('Hello World')
lab1= tk.Label(window, text='Input the desired delay time')
btn=tk.Button(window, text='Go to new window', bg='Blue', command=NewTab)
btn2=tk.Button(window, text='Leave', bg='Red', command=close)
imgset=ImageTk.PhotoImage(Image.open(imgpath))
img = tk.Label(window, image=imgset)
img.pack()
lab1.pack()
btn.pack()
btn2.pack()
window.mainloop()
where imagepath is a path to a picture in the my pictures folder
and this is the error I keep getting
Traceback (most recent call last):
File "C:\PythonScripts\trunk\Personal\PythonWindow_ForTiming.py", line 49, in <module>
img = tk.Label(window, image=imgset)
File "C:\Python34\lib\tkinter\__init__.py", line 2604, in __init__
Widget.__init__(self, master, 'label', cnf, kw)
File "C:\Python34\lib\tkinter\__init__.py", line 2122, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: image "pyimage1" doesn't exist
What am I doing incorrectly? Could you please include comments to help me understand, I am just learning about tkinter
Thanks in advance
You need to add 2 lines as following (I commented the lines in question)
imgset=Image.open(imgpath)
# Convert imgset to a Tkinter-compatible image object
photo = ImageTk.PhotoImage(imgset)
img = tk.Label(window, image=photo)
# Keep a reference to the image
img.image = photo
img.pack()
Elementary note: you may rename img to something that reflects the Label() instance better (to avoid an eventual confusion) such as label
You may be interested in reading The Tkinter PhotoImage Class

Odd bugs when image processing with Pillow (in tkinter)

I'm having a weird problem when trying to use Pillow to display images in tkinter.
I tried originally displaying images in the default tkinter way, which worked fine for gifs:
import tkinter as tk
root = tk.Tk()
src = tk.PhotoImage(file = "C:\\Users\\Matt\\Desktop\\K8pnR.gif")
label = tk.Label(root, image = src)
label.pack()
(K8pnR is just a random gif I found on imgur)
This works great but the only problem is I want to display other file types. This lead me to Pillow, as I am working in Python 3.4. I tried to start with displaying the same file, but using Pillow:
import tkinter as tk
from PIL import Image
root = tk.Tk()
src = Image.open("C:\\Users\\Matt\\Desktop\\K8pnR.gif")
img = tk.PhotoImage(file = src)
label = tk.Label(image = img, master = root)
label.pack()
This leads to a very weird and ugly no such file or directory error:
Traceback (most recent call last):
File "C:\Users\Matt\Desktop\pil test.py", line 7, in <module>
img = tk.PhotoImage(file = src)
File "C:\Python34\lib\tkinter\__init__.py", line 3416, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "C:\Python34\lib\tkinter\__init__.py", line 3372, in __init__
self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't open "<PIL.GifImagePlugin.GifImageFile image mode=P size=494x260 at 0x26A6CD0>": no such file or directory
I tried different files, different filetypes, and even reinstalling Pillow, but I still get the error.
Does anyone know what's going on here? Did I miss something totally obvious?
Edit:
When I try the suggested fix, I get this spooky error:
Traceback (most recent call last):
File "C:\Users\Matt\Desktop\pil test.py", line 6, in <module>
img = ImageTk.PhotoImage(file = src)
File "C:\Python34\lib\site-packages\PIL\ImageTk.py", line 84, in __init__
image = Image.open(kw["file"])
File "C:\Python34\lib\site-packages\PIL\Image.py", line 2297, in open
prefix = fp.read(16)
File "C:\Python34\lib\site-packages\PIL\Image.py", line 632, in __getattr__
raise AttributeError(name)
AttributeError: read
The problem lies in this line:
img = tk.PhotoImage(file = src)
You are using stock PhotoImage from tkinter. It is not compatible with PIL you want to use ImageTk from PIL.
import tkinter as tk
from PIL import Image, ImageTk
root = tk.Tk()
src = Image.open("C:\\Users\\Matt\\Desktop\\K8pnR.gif")
img = ImageTk.PhotoImage(file = src)
label = tk.Label(image = img, master = root)
label.pack()
Here is documentation of stock PhotoImage class: http://effbot.org/tkinterbook/photoimage.htm , it accepts only path in constructor.

Problems with Images in Python's Tkinter

I have been trying to include images in my Tkinter widgets, but nothing seems to work. Here's my code:
from Tkinter import *
from PIL import Image
root = Tk()
image = Image.open('images/myimage.jpg')
root.image = image
b = Radiobutton(root, text='Image',image=image,value='I')
b.pack()
root.mainloop()
The error I get is:
Trac
eback (most recent call last):
File "C:/Users/.../loadimages.py", line 7, in <module>
b = Radiobutton(root, text='Image',image=image,value='I')
File "C:\Python27\lib\lib-tk\Tkinter.py", line 2714, in __init__
Widget.__init__(self, master, 'radiobutton', cnf, kw)
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1974, in __init__
(widgetName, self._w) + extra + self._options(cnf))
TclError: image "<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=402x439 at 0x2A6B080>" doesn't exist
Most internet sources suggest keeping a reference to the image to avoid the garbage collector, but I don't see how I could do that more than what I have here. There are also suggestions regarding having multiple Tk instances, but I only have one.
To whoever helps, thanks in advance!
You need to convert the image you open using PIL into a PhotoImage:
from PIL import Image, ImageTk
image = Image.open("images/myimage.jpg")
photoimg = ImageTk.PhotoImage(image)
b = Radiobutton(root, image=photoimg)
See also: Photoimage API

Categories

Resources