2013-09-29 87 views
9

C'è un modo per creare una "schermata di caricamento" in Python 3.x usando Tkinter? Voglio dire come la schermata di caricamento di Adobe Photoshop, con trasparenza e così via. Sono riuscito a sbarazzarsi del confine telaio già utilizzando:Sfondo trasparente in una finestra di Tkinter

root.overrideredirect(1) 

Ma se faccio questo:

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

l'immagine mostra bene, ma con la finestra sfondo grigio invece di trasparenza.

C'è un modo per aggiungere trasparenza a una finestra, ma continua a visualizzare correttamente l'immagine?

risposta

2

Non esiste un modo multipiattaforma per rendere trasparente lo sfondo in tkinter.

-1

E 'semplice: utilizzare root.attributes()

Nel tuo caso, sarebbe qualcosa di simile root.attributes("-alpha", 0.5) dove 0.5 è la trasparenza che si desidera, 0 essendo completamente trasparente al 1 è opaco.

+3

No, non è quello In realtà quello che voglio ... Non voglio che tutto sia trasparente, solo lo sfondo. L'immagine stessa dovrebbe rimanere opaca. – forumfresser

16

È possibile, ma dipende dal sistema operativo. Questo funziona in 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() 
3

Ecco una soluzione per 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

(Testato su MacOS Sierra 10.12.21)

+1

Grazie mille per questo. Potresti spiegare perché hai bisogno di 'root.wm_attributes (" - transparent ", True)' e 'root.config (bg = 'systemTransparent')'. Che cosa fa? Funziona perfettamente ma la spiegazione è un po 'vaga –

+0

Prego :) Ho provato a chiarire un po i commenti nella risposta. Il primo comando "consente" alla finestra di essere trasparente disattivando l'ombra della finestra, la seconda specifica quale colore di sfondo (trasparente) utilizzare ([Vedere questo collegamento] (https://www.tcl.tk/man/tcl8 0,4/TkCmd/wm.htm # M18)) – Josselin

1

si può fare this: window.attributes("-transparentcolor", "somecolor")