This is my 2nd question on python/tkinter... I'm experimenting on containers to maximise code reuse but I seem to be stuck at attempting to display the image for the ContainerImage section although at runtime it does set the background to black and displays the text just not the image. Would appreciate any pointers on fixing this. Thanks

import tkinter as tk
import time


class Application(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.withdraw()  # Hide the root while it is built.
        self.title("DoA Tools")
        self.resizable(width=False, height=False)
        win_width = 800
        win_height = 450
        scr_width = (self.winfo_screenwidth() - win_width) // 2
        scr_height = (self.winfo_screenheight() - win_height) // 2
        self.geometry("{0}x{1}+{2}+{3}".format(win_width, win_height, scr_width, scr_height))
        self.call('wm', 'iconphoto', self._w, tk.PhotoImage(file="icon.png"))
        # Temporary Placeholders
        ContainerMain(self, "Title Text", "Content Text")
        ContainerButton(self)
        ContainerImage(self)


class ContainerMain(tk.Frame):
    def __init__(self, parent, header="", subheader=""):
        tk.Frame.__init__(self, parent)
        self.place(x=200, y=0, height=400, width=600)
        self.configure(bg="white")
        # Temporary Placeholders
        hdr_title = tk.Label(self, text=header)
        hdr_title.place(x=10, y=15, height=21, width=575)
        hdr_title.configure(bg="white", width=600, anchor="w", font="TkDefaultFont 9 bold")
        hdr_subtitle = tk.Label(self, text=subheader)
        hdr_subtitle.place(x=10, y=44, height=21, width=575)
        hdr_subtitle.configure(bg="white", width=600, anchor="nw")


class ContainerButton(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.place(x=-2, y=400, height=54, width=804)
        self.configure(borderwidth="2", relief="groove", width=804)
        # Temporary Placeholders
        btn_close = tk.Button(self, text="Exit")
        btn_close.place(x=710, y=10, height=30, width=80)


class ContainerImage(tk.Label):
    def __init__(self, parent):
        tk.Label.__init__(self, parent)
        self.place(x=0, y=0, height=400, width=200)
        # temporary Placeholders
        image = tk.PhotoImage(master=self, file="side.png")
        self.configure(text="Side Image", fg='white', bg='black', bd=0, image=image, compound="center")


class AccountManagement:
    def __init__(self, root):
        self.__root = root
        self.__root.deiconify()

Hello, effbot.org says to keep a reference to the image object to prevent it from being garbage collected. You could try

self.our_image = tk.PhotoImage(master=self, file="side.png")

http://effbot.org/tkinterbook/label.htm

commented: That did the trick! Thank you +0
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.