Transparenter Hintergrund in einem Tkinter-Fenster
Lesezeit: 4 Minuten
forumfresser
Gibt es eine Möglichkeit, mit Tkinter einen “Ladebildschirm” in Python 3.x zu erstellen? Ich meine, wie der Ladebildschirm für Adobe Photoshop, mit Transparenz und so weiter. Ich habe es geschafft, den Rahmenrand bereits loszuwerden, indem ich Folgendes verwendet habe:
Das Bild wird gut angezeigt, aber mit grauem Fensterhintergrund anstelle von Transparenz.
Gibt es eine Möglichkeit, einem Fenster Transparenz hinzuzufügen, aber das Bild trotzdem korrekt anzuzeigen?
dln385
Es ist möglich, aber es ist OS-abhängig. Das 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()
Wie kann ich die Transparenz des Fensters rückgängig machen?
– JeanExtreme002
24. Oktober 19 um 1:47 Uhr
Der root.lift() ist nutzlos, wenn Sie anrufen werden root.attributes("-topmost", True)
– Die Eidechse
4. September 21 um 20:04 Uhr
Josselin
Hier ist eine Lösung für Mac OS:
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()
(getestet auf macOS Sierra 10.12.21)
Vielen Dank dafür. Könnten Sie bitte erklären, warum Sie beides benötigen root.wm_attributes("-transparent", True) und root.config(bg='systemTransparent'). Was tut es? Es funktioniert einwandfrei, aber die Erklärung ist etwas vage
– Saransh Malik
10. November 17 um 11:27 Uhr
Gern geschehen 🙂 Ich habe versucht, die Kommentare in der Antwort ein wenig zu verdeutlichen. Der erste Befehl „erlaubt“ das Fenster transparent zu sein, indem er den Fensterschatten ausschaltet, der zweite gibt an, welche (transparente) Hintergrundfarbe verwendet werden soll (Siehe diesen Link)
– Josselin
13. November 17 um 7:55 Uhr
Für macOS BigSur müssen Sie ersetzen root.overrideredirect(True) mit root.overrideredirect(1) und root.overrideredirect(0) nacheinander.
– Siddharth Dushantha
12. April 21 um 18:45 Uhr
Ich habe dies auf MacOS Big Sur 11.3 versucht. Leider ist die Kombination aus label.config(bg='systemTransparent') mit einem von root.wm_attributes("-transparent", True) und/oder root.config(bg='systemTransparent') mein Fenster komplett transparent gemacht – was bedeutet, dass nicht einmal das Bild sichtbar ist … Mit nur root.wm_attributes("-transparent", True), es blinkt kurz beim Start und verschwindet dann; während mit root.config(bg='systemTransparent')es wird gar nicht angezeigt.
– lenka_cizkova
12. Mai 21 um 1:23 Uhr
@Josselin Dein Kommentar “# Speichern Sie das PhotoImage, um eine vorzeitige Garbage-Collection zu verhindern”ist falsch, da das Bild nicht wirklich den Gültigkeitsbereich verlassen würde.
– Die Eidechse
4. September 21 um 20:01 Uhr
Bryan Oakley
Es gibt keine plattformübergreifende Möglichkeit, nur den Hintergrund in tkinter transparent zu machen.
Gibt es einen Linux-Weg?
– Meric Özcan
2. Dezember 2020 um 14:13 Uhr
@MericOzcan Ich glaube, das wird im Windows-Manager für Linux gemacht
– leopardxpreload
22. März 21 um 5:44 Uhr
@MericOzcan Ich habe eine “Linux Way” -Antwort gepostet, nachdem ich einen Tkinter-Weg aufgegeben hatte. Ich habe Tkinter 90 Minuten lang ausprobiert.
– WinEunuuchs2Unix
16. Juni 21 um 0:40 Uhr
Ganz einfach: verwenden root.attributes()
In Ihrem Fall wäre es so etwas wie root.attributes("-alpha", 0.5) wobei 0,5 die gewünschte Transparenz ist, wobei 0 vollständig transparent und 1 undurchsichtig ist.
Du kannst das:window.attributes("-transparentcolor", "somecolor")
Nicht mehr
Benutz einfach root.config(bg='')das ist alles, zum Beispiel:
from tkinter import *
root = Tk()
root.configure(bg='')
Ryan Gurnick
Um nur ein einzelnes Bild zu erstellen, können Sie Folgendes tun.