it-swarm.com.de

Transparenter Hintergrund in einem Tkinter-Fenster

Gibt es eine Möglichkeit, in Python 3.x mit Tkinter einen "Ladebildschirm" zu erstellen? Ich meine, der Ladebildschirm für Adobe Photoshop, mit Transparenz usw. Ich habe es geschafft, den Rahmenrand bereits zu entfernen, indem ich:

root.overrideredirect(1)

Aber wenn ich das mache:

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

das Bild wird gut dargestellt, jedoch mit grauem Fensterhintergrund anstelle von Transparenz.

Gibt es eine Möglichkeit, einem Fenster Transparenz hinzuzufügen, das Bild aber trotzdem korrekt anzuzeigen?

9
forumfresser

Es gibt keinen plattformübergreifenden Weg, nur den Hintergrund in tkinter transparent zu machen.

3
Bryan Oakley

Es ist möglich, aber es ist vom Betriebssystem abhängig. Dies funktioniert unter 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()
20
dln385

Hier ist eine Lösung für 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

(getestet auf macOS Sierra 10.12.21)

4
Josselin

Es ist ganz einfach: benutze root.attributes()

In Ihrem Fall wäre es so etwas wie root.attributes("-alpha", 0.5), wobei 0,5 die gewünschte Transparenz ist und 0 vollständig transparent bis 1 undurchsichtig ist.

2
vinit_ivar

Sie können dies tun: window.attributes("-transparentcolor", "somecolor")

1
Jakub Bláha