2013-09-29 4 views
9

Gibt es eine Möglichkeit, einen "Ladebildschirm" in Python 3.x mit Tkinter zu erstellen? Ich meine wie der Ladebildschirm für Adobe Photoshop, mit Transparenz und so weiter. Ich schaffte es der Rahmengrenze bereits mit loszuwerden:Transparenter Hintergrund in einem Tkinter-Fenster

root.overrideredirect(1) 

Aber wenn ich dies tun:

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

das Bild zeigt in Ordnung, aber mit dem grauen Fenster Hintergrund statt Transparenz.

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

Antwort

2

Es gibt keine plattformübergreifende Möglichkeit, nur den Hintergrund in tkinter transparent zu machen.

-1

Es ist ganz einfach: Verwenden Sie root.attributes()

In Ihrem Fall würde es so etwas wie root.attributes("-alpha", 0.5), wo 0,5 ist die Transparenz, die Sie wollen, 0 bis vollständig transparent ist 1 undurchsichtig zu sein.

+3

Nein, das ist nein t eigentlich was ich will ... ich will nicht, dass das Ganze transparent ist, nur der Hintergrund. Das Bild selbst sollte undurchsichtig bleiben. – forumfresser

16

Es ist möglich, aber es hängt vom Betriebssystem ab. Dies wird in Windows arbeiten:

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() 
3

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)

+1

Vielen Dank dafür. Könnten Sie bitte erklären, warum Sie sowohl 'root.wm_attributes (" - transparent ", True)' und 'root.config (bg = 'systemTransparent')' brauchen. Was tut es? Es funktioniert perfekt, aber die Erklärung ist ein bisschen vage –

+0

Gern geschehen :) Ich habe versucht, ein wenig die Kommentare in der Antwort zu klären. Der erste Befehl "erlaubt", dass das Fenster transparent ist, indem der Fensterschatten ausgeschaltet wird, der zweite gibt an, welche (transparente) Hintergrundfarbe verwendet werden soll ([Siehe diesen Link] (https://www.tcl.tk/man/tcl8 .4/TkCmd/wm.htm # M18)) – Josselin

1

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