Search code examples
pythontkintermessagetk-toolkit

Python tkinter label image not drawn unless a message widget is behind it


I have a transparent tkinter message widget and a label, one containing text the other an image, the image is only drawn in the parts where the text label is behind it. 1

I'm using python tkinter on windows 7 to draw the labels on the desktop on a transparent window, so what you're seeing in the background is my regular windows desktop, which might have something to do with it

Here are snippets of code, but there is alot more that's not relevant I think

x = Tk()

label = tkinter.Message(x, textvariable=text, font=('Terminal','10'), fg='white', bg='green', width=800, anchor='n')
label.master.overrideredirect(True)
label.master.geometry('+30+30')
label.master.lift()
label.master.wm_attributes('-transparentcolor', 'green')
label.pack()

Then this is inside a function which is called to display the plot

new_plot = Label(x, image=plot_image, fg='white', bg='green', anchor='n', width=640, height=480)
new_plot.image = plot_image

new_plot.master.wm_attributes('-transparentcolor', 'green')

new_plot.place(x = 20, y = 30, width=640, height=480)
new_plot.update()

Then at the end

x.mainloop()

I hope this is all that's relevant to the problem


Solution

  • I suspect it has to do with the fact that a tkinter window by default is 1x1 pixel in size. When you use place, tkinter will not expand the window to fit its contents.

    The reason it works with the messagebox is because you are adding the messagebox to the root window with pack which will cause the window to grow.

    The simple solution is to use new_plot.pack(...) instead of new_plot.place(...).