2013-03-18 12 views
5

Ho il seguente codice che utilizza Tkinter per creare una finestra e disegnare forme su una tela al suo interno.Come posso variare l'alfa di una forma con Tkinter?

from Tkinter import * 

class Example(Frame): 

    def __init__(self, parent): 
     Frame.__init__(self, parent) 

     self.parent = parent 
     self.initUI() 

    def initUI(self): 

     self.parent.title("Colors") 
     self.pack(fill=BOTH, expand=1) 

     canvas = Canvas(self) 

     canvas.create_oval(10, 10, 80, 80, outline="red", fill="green", width=2) 
     canvas.create_oval(110, 10, 210, 80, outline="#f11", fill="#1f1", width=2) 
     canvas.create_rectangle(20, 50, 300, 100, outline="black", fill="red", width=2) 

     canvas.pack(fill=BOTH, expand=1) 


if __name__ == '__main__': 
    root = Tk() 
    ex = Example(root) 
    root.geometry("400x400+100+100") # WIDTHxHEIGHT+X+Y 
    root.mainloop() 

Il rettangolo si trova in cima ai due ovali. C'è un modo in cui posso rendere il rettangolo parzialmente trasparente (quindi i contorni degli ovali possono essere visti)?

risposta

4

Non è possibile modificare l'alfa degli elementi su una tela.

+3

Come si fa a sapere questo? Dove diavolo è documentato? Oh, la frustrazione! –

+0

@MatthewWalker: lo so perché nessuna documentazione dice che puoi. La documentazione ufficiale di tk è molto precisa e completa e in nessun posto menziona i canali alfa. –

+0

Grazie per questo chiarimento. Ciò renderebbe abbastanza difficile fornire una fonte: o) Dato che non è possibile farlo in modo nativo in Tkinter, esiste un'alternativa? Stavo pensando di usare Cairo per rendere un'immagine che potrebbe essere visualizzata in una tela. Qualche idea migliore? –

10

Non sono completamente sicuro, ma penso che non sia possibile impostare un colore RGBA come colore di riempimento di un elemento di tela. Tuttavia, si può dare una prova per l'opzione stipple:

canvas.create_rectangle(20, 50, 300, 100, outline="black", fill="red", width=2, stipple="gray50") 
2

Un'idea è fare un'immagine png rettangolo con colori semitrasparenti. Quindi usa create_image invece di create_rectangle.

+0

Sono in ritardo alla festa, ma volevo confermarlo: funziona perfettamente! – alessandro

Problemi correlati