Прозрачный фон в окне Tkinter

есть ли способ создать "экран загрузки" в Python 3.x с помощью Tkinter? Я имею в виду как экран загрузки для Photoshop, с прозрачностью и так далее. Мне удалось избавиться от границы кадра, уже используя:

root.overrideredirect(1)

но если я делаю это:

root.image = PhotoImage(file=pyloc+'startup.gif')
label = Label(image=root.image)
label.pack()

изображение отображается нормально, но с серым фоном окна вместо прозрачности.

есть ли способ добавить прозрачность в окно, но все еще отображать изображение правильно?

5 ответов


нет кросс-платформенного способа сделать только фон прозрачным в tkinter.


это возможно, но это зависит от ОС. Это будет работать в Windows:

import Tkinter as tk # Python 2
import tkinter as tk # Python 3
root = tk.Tk()
# The image must be stored to Tk or it will be garbage collected.
root.image = tk.PhotoImage(file='startup.gif')
label = tk.Label(root, image=root.image, bg='white')
root.overrideredirect(True)
root.geometry("+250+250")
root.lift()
root.wm_attributes("-topmost", True)
root.wm_attributes("-disabled", True)
root.wm_attributes("-transparentcolor", "white")
label.pack()
label.mainloop()

вот решение для macOS:

import tkinter as tk

root = tk.Tk()
# Hide the root window drag bar and close button
root.overrideredirect(True)
# Make the root window always on top
root.wm_attributes("-topmost", True)
# Turn off the window shadow
root.wm_attributes("-transparent", True)
# Set the root window background color to a transparent color
root.config(bg='systemTransparent')

root.geometry("+300+300")

# Store the PhotoImage to prevent early garbage collection
root.image = tk.PhotoImage(file="photoshop-icon.gif")
# Display the image on a label
label = tk.Label(root, image=root.image)
# Set the label background color to a transparent color
label.config(bg='systemTransparent')
label.pack()

root.mainloop()

Screenshot

(протестировано на macOS Sierra 10.12.21)


вы можете сделать это:window.attributes("-transparentcolor", "somecolor")


это просто: используйте root.attributes()

в вашем случае это было бы что-то вроде root.attributes("-alpha", 0.5) где 0.5-прозрачность, которую вы хотите, 0 полностью прозрачна для 1 непрозрачна.