Transparenter Hintergrund in einem Tkinter-Fenster

Lesezeit: 4 Minuten

Transparenter Hintergrund in einem Tkinter Fenster
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:

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 angezeigt, aber mit grauem Fensterhintergrund anstelle von Transparenz.

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

1643100365 732 Transparenter Hintergrund in einem Tkinter Fenster
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

Transparenter Hintergrund in einem Tkinter Fenster
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()

Bildschirmfoto

(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

1643100366 354 Transparenter Hintergrund in einem Tkinter Fenster
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")

1643100366 478 Transparenter Hintergrund in einem Tkinter Fenster
Nicht mehr

Benutz einfach root.config(bg='')das ist alles, zum Beispiel:

from tkinter import *
root = Tk()
root.configure(bg='')

1643100366 776 Transparenter Hintergrund in einem Tkinter Fenster
Ryan Gurnick

Um nur ein einzelnes Bild zu erstellen, können Sie Folgendes tun.

label = Label(root)
label.config(image="image.gif")
label.config(bg='systemTransparent')

Dies scheint es dem GIF und dem Alphakanal zu ermöglichen, speziell auf macOS zu glänzen.

.

629960cookie-checkTransparenter Hintergrund in einem Tkinter-Fenster

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy