Seite 1 von 1
Bild mit Transparenz
Verfasst: Sonntag 21. November 2010, 13:11
von asdman3000
Hallo,
ich möchte mit Python und Tkinter die Windows-Funktion "Zeiger-Position beim Drücken der STRG-Taste anzeigen" (animierter Kreis um den Mauszeiger) nachbauen, um eine andere Taste belegen und eine eigene Animation festlegen zu können.
Hier mein Code soweit:
Code: Alles auswählen
from Tkinter import *
from PIL import Image
import ImageTk
import time
root = Tk()
def destroyTL():
toplevel.destroy()
def addImage(event):
global toplevel
toplevel = Toplevel()
toplevel.overrideredirect(1) #toplevel-Fensterrahmen verstecken
pic1 = ImageTk.PhotoImage(im)
label_image = Label(toplevel, image=pic1)
label_image.place(x=0,y=0,width=im.size[0]-1,height=im.size[1]-1)
for i in range(1,50): # schleife durch 50 einzelbilder -> animation
if i <=9:
name = "000"+str(i)+".gif"
pic = ImageTk.PhotoImage(Image.open(name))
label_image.configure(image = pic, state=ACTIVE)
label_image.image = pic
else:
name = "00"+str(i)+".gif"
pic = ImageTk.PhotoImage(Image.open(name))
label_image.configure(image = pic, state=ACTIVE)
label_image.pic = pic
time.sleep(0.015)
toplevel.update()
toplevel.after(200,destroyTL)
root.bind("<Return>", addImage)
root.withdraw() #root-Fenster verstecken
root.mainloop()
Die Schleife, die durch die Einzelbilder geht, funktioniert wunderbar, aber die .gif-Dateien, die ich benutze, werden nicht transparent angezeigt. Image.mode gibt "P" zurück, als ich .png-Dateien benutzt habe, war Image.mode "RGBA", aber auch keine Transparenz.
Was muss ich machen, damit die Bilder mit Transparenz angezeigt werden ?
Oder sollte ich nicht Tkinter benutzen sondern wxPython/pygame ?
Re: Bild mit Transparenz
Verfasst: Sonntag 21. November 2010, 15:26
von Xynon1
Für transparente Bilder benötigst du die PIL.
Re: Bild mit Transparenz
Verfasst: Sonntag 21. November 2010, 15:35
von asdman3000
Xynon1 hat geschrieben:Für transparente Bilder benötigst du die PIL.
...die ich doch eigentlich auch benutze
( pic = ImageTk.PhotoImage(Image.open(name)) )
Re: Bild mit Transparenz
Verfasst: Sonntag 21. November 2010, 15:37
von Xynon1
oh sry übersehen
Ich arbeite für sowas immer mit meinem eigenen Modul, etwas gewöhnungs bedürftig das mal wieder so zusehen.
Ist schon eine Weile her.
Re: Bild mit Transparenz
Verfasst: Sonntag 21. November 2010, 15:40
von Xynon1
Soll ich dir mal mein modul schicken ?
Erleichtert eventuell auch dir das leben.
Ich vermute die Transparenz geht bei deiner umwandlung verloren.
Re: Bild mit Transparenz
Verfasst: Sonntag 21. November 2010, 15:47
von asdman3000
Soll ich dir mal mein modul schicken ?
Erleichtert eventuell auch dir das leben.
Ich wäre für jede Vereinfachung dankbar.
Re: Bild mit Transparenz
Verfasst: Sonntag 21. November 2010, 15:54
von Xynon1
Hab es dir als pm geschickt, dauert also etwas bis es ankommt, wenn du ne Frage hast bitte als pm.
Die Funktionen habe ich vorallem für imagesets gebaut.
Also ein Bild was aus mehreren gleich großen Bilder besteht, deine Umwandlungs geschichte ist natürlich dabei.
Re: Bild mit Transparenz
Verfasst: Mittwoch 24. November 2010, 17:59
von asdman3000
@ Xynon1: Das mit deinem Modul hat auch nicht geklappt, ich hab bemerkt, dass mein Problem ein anderes ist:
Das Bild wird immer transparent dargestellt, aber die transparenten Bereiche werden mit der Hintergrundfarbe des Labels toplevel ausgefüllt.
Wie kann ich das verhindern?
Re: Bild mit Transparenz
Verfasst: Mittwoch 24. November 2010, 18:14
von Xynon1
da gab es eine alpha option für das toplevel, die hat aber bei mir noch nie richtig funktioniert.
Dennoch hier der link:
http://effbot.org/tkinterbook/wm.htm#Tk ... tes-method
Re: Bild mit Transparenz
Verfasst: Mittwoch 24. November 2010, 18:54
von asdman3000
Die
alpha option hat zwar funktioniert (so geschrieben: toplevel.attributes(
"-alpha" , 0.0) ), hat aber alles, also auch meine Bilderfolge, transparent gemacht. Bin dann allerdings auf die option
transparentcolor gestoßen, hab den Code wie folgt geändert und es funktioniert!
Code: Alles auswählen
toplevel.attributes("-transparentcolor", "red")
toplevel.overrideredirect(1)
label_image.configure(bg = "red")
Vielen Dank, Problem gelöst.
Re: Bild mit Transparenz
Verfasst: Mittwoch 24. November 2010, 20:32
von asdman3000
Oben genanntes funktioniert zwar, aber bei .png-Bildern mit halbtransparenten Pixeln werden diese rot angezeigt, wohl wegen label_image.configure(bg = "red").
Ich könnte damit leben, fände es aber natürlich schöner, weiche Übergange zu haben. Gibt es eine andere Möglichkeit, als die mit transparentcolor ?
Re: Bild mit Transparenz
Verfasst: Donnerstag 25. November 2010, 07:48
von Xynon1
Nicht das ich wüsste, selbst die transparentcolor ist mir schon neu :K
Wo hast du das gefunden ?
Vieleicht steht auf der entsprechenden Seite noch was hilfreiches.
Was passiert eigentlich, wenn du einfach mal "label_image.configure(bg = "red")" weg lässt ?
Re: Bild mit Transparenz
Verfasst: Donnerstag 25. November 2010, 17:17
von asdman3000
Xynon1 hat geschrieben:Wo hast du das gefunden ?
Vieleicht steht auf der entsprechenden Seite noch was hilfreiches.
Hier:
http://tcl.tk/man/tcl8.4/TkCmd/wm.htm#M13, ist glaub ich gar nicht spezifisch Tkinter, aber bei mir funktionierts.
Xynon1 hat geschrieben:Was passiert eigentlich, wenn du einfach mal "label_image.configure(bg = "red")" weg lässt ?
Dann hab ich dort wo die Bilder transparent sein sollten die Standard-Hintergrundfarbe hellgrau. Ich hab zum testen einfach rot genommen, weil es auf den Bildern nicht vorkommt und ein kurzes Wort ist

Re: Bild mit Transparenz
Verfasst: Donnerstag 25. November 2010, 17:24
von Xynon1
:K - tut mir leid da kann ich dir wirklich nicht mehr helfen.
Aber danke für den link, jetzt weiß ich warum es bei mir nie ging - ist nur für Windows

Re: Bild mit Transparenz
Verfasst: Freitag 26. November 2010, 20:34
von wuf
Hallo asdman3000
Hast du so etwas wie folgt unter Windows schon ausprobiert?:
Code: Alles auswählen
import Tkinter as tk
app_win=tk.Tk()
app_win.geometry("200x200")
app_win.config(cursor="@aero_working.ani")
app_win.mainloop()
Die animierten Cursors findest du unter dem Pfad:
C:\Windows\Cursors
Kopiere die gewünschten Cursordatei in dein Arbeitsverzeichnis.
Gruss wuf
