Home > OS >  Insert an image in a labelFrame title with tkinter
Insert an image in a labelFrame title with tkinter

Time:03-29

I wonder if it's possible to insert an image or icon in the title of a Labelframe in tkinter ?

Maybe something like this lf = Labelframe(root, image='my_img'), the same as we can do with a button. It would be very useful.

CodePudding user response:

You can insert any widget as labelwidget option of LabelFrame.

If you want an image instead of text displayed in LabelFrame:

import tkinter as tk
from PIL import Image, ImageTk

w = tk.Tk()
w.geometry("400x500")
img_open = Image.open("example_1.png")
img = ImageTk.PhotoImage(img_open)

label_title = tk.Label(w, image=img)    #important Do Not grid/pack/place it!

label_frame = tk.LabelFrame(w, labelwidget=label_title)
label_frame.grid(row=0, column=0)

#fill LabelFrame with something to make it visible
bt = tk.Button(label_frame, text="Press")
bt.grid(padx=20, pady=20)
w.mainloop()

Output: enter image description here

Or like I said before you can use any widget.
An example label with image and a label with text.

import tkinter as tk
from PIL import Image, ImageTk

w = tk.Tk()
w.geometry("400x500")
img_open = Image.open("example_1.png")
img = ImageTk.PhotoImage(img_open)

frame_labelwidget = tk.Frame(w)    #important Do Not grid/pack/place it!

label_image = tk.Label(frame_labelwidget, image=img)
label_image.grid(row=0, column=0)

label_text = tk.Label(frame_labelwidget, text="Teamwork")
label_text.grid(row=0, column=1)

label_frame = tk.LabelFrame(w, labelwidget=frame_labelwidget)
label_frame.grid(row=0, column=0)

#fill LabelFrame with something to make it visible
bt = tk.Button(label_frame, text="Press")
bt.grid(padx=20, pady=20)
w.mainloop()

Output: enter image description here

Of course that makes less sense because you can have text and an image combined in tk.Label by using compound option.
I added it only for demonstration purpose, you can add any widget you want. Instead of label_text you could add an Entry, Canvas...

  • Related