2013-03-18 5 views
5

Ich habe den folgenden Code, der Tkinter verwendet, um ein Fenster zu erstellen und Formen auf einer Leinwand darin zu zeichnen.Wie kann ich das Alpha einer Form mit Tkinter variieren?

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

Das Rechteck sitzt auf den zwei Ovalen. Gibt es eine Möglichkeit, das Rechteck teilweise transparent zu machen (so dass man die Umrisse der Ovale sehen kann)?

Antwort

4

Sie können nicht die Alpha-Version von Elementen auf einer Leinwand ändern.

+3

Wie weißt du das? Wo auf der Erde ist es dokumentiert? Oh, die Frustration! –

+0

@MatthewWalker: Ich weiß es, weil keine Dokumentation sagt, dass Sie können. Die offizielle tk-Dokumentation ist sehr präzise und vollständig und erwähnt nirgends Alpha-Kanäle. –

+0

Danke für diese Klarstellung. Das würde die Bereitstellung einer Quelle ziemlich schwierig machen; o) Da es in Tkinter nativ nicht möglich ist, gibt es eine Alternative? Ich habe erwogen, mit Cairo ein Bild zu rendern, das in Canvas angezeigt werden kann. Irgendwelche besseren Ideen? –

10

Ich bin mir nicht ganz sicher, aber ich denke, es ist nicht möglich, eine RGBA-Farbe als Füllfarbe eines Leinwandelements festzulegen. Sie können jedoch einen Versuch der stipple Option geben:

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

Eine Idee ist, ein Rechteck-Png-Bild mit halbtransparenten Farben zu machen. Verwenden Sie dann create_image anstelle von create_rectangle.

+0

Ich bin spät auf der Party, wollte das aber bestätigen: es funktioniert perfekt! – alessandro