Seite 1 von 3

Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 18:22
von M96Wayne
Guten Abend,

ich möchte in Python Transparente Bilder einfügen, doch jedesmal wenn ich das mache, werden die Bilder mit weißem Hintergrund dargestellt.
Die Formate der Bilder sind immer PNG.
Deswegen bräuchte ich Hilfe dabei die Bilder in dem Programm als transparent darzustellen.

Mfg

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 18:29
von Schorlem
Du könntest die Python Imaging Library verwenden, die jedoch nicht Python 3 unterstützt. ImageTk.PhotoImage könnte für dich da interessant sein. Du musst nur sicherstellen, dass deine Bilder tatsächlich einen Alphakanal besitzen ;)

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 18:37
von BlackJack
Für Python 3 gäbe es dann `pillow`, was so grundsätzlich die gleiche API wie `PIL` bietet.

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 18:48
von M96Wayne
Und wie füge ich das im Programmtext hinzu, also ich meine jetzt das Transparente Bild.

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 19:11
von BlackJack
@M96Wayne: Genau so wie welche ohne Transparenz. Du musst halt nur statt dem `PhotoImage`-Typ von `Tkinter` den aus dem `PIL.ImageTk`-Modul verwenden.

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 19:36
von M96Wayne
Ok! Vielen Dank, ich werde es versuchen! :)

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 19:46
von M96Wayne
TypeError: 'module' object is not callable
--> Bekomme den Error in der Zeile:
Hintergrund = PIL.ImageTk('back.png')

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 19:53
von Schorlem
Liegt daran, dass du damit, wie die Fehlermeldung beschreibt, ein Modul aufrufst, da PIL in diesem Fall ein Package ist, das Module enthält, die wiederum Klassen enthalten.
Aufrufen musst du es dann mit "PIL.ImageTk.PhotoImage(bla)".

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 20:20
von M96Wayne
Dann bekomm ich den Error:

Hintergrund = PIL.ImageTk.PhotoImage('back.png')
AttributeError: 'module' object has no attribute 'ImageTk'

Hab ich dann etwas falsch importiert oder wieder falsch angewandt?

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 20:42
von BlackJack
@M96Wayne: Du musst das Modul importieren, von alleine passiert das nicht.

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 21:49
von M96Wayne

Code: Alles auswählen

from tkinter import *
import PIL.ImageTk
from PIL import Image, ImageDraw
Fenster = Tk()
Fenster.title ("Das Spiel")
Fenster.geometry ("1280x1024")
Fenster.resizable(width=FALSE, height=FALSE)


Hintergrund = PIL.ImageTk.PhotoImage('img2.png')
a=Button(Fenster,image=Hintergrund,)
a.place(x=0,y=0,width=128,height=128)
War nur ein Rechtschreibfehler. Hatte mich ausversehen verschrieben.
Trzd bekomm ich immer noch einen Key Error, obwohl meine Datei im Verzeichnis ist.

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 22:44
von BlackJack
@M96Wayne: Schau Dir mal die Dokumentation zu `PhotoImage` an, welche Argumente man da übergeben kann.

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 23:03
von M96Wayne

Code: Alles auswählen

from tkinter import *
import PIL.ImageTk
from PIL import Image, ImageDraw
Fenster = Tk()
Fenster.title ("Das Spiel")
Fenster.geometry ("1280x1024")
Fenster.resizable(width=FALSE, height=FALSE)
#AA = PIL.ImageTk.PhotoImage(file='Wallpaper.gif')
#A=Button(Fenster,image=AA)
#A.place(x=0,y=0,width=1280,height=1024)
Hintergrund = PIL.ImageTk.PhotoImage(file='YY.png')
a=Button(Fenster,image=Hintergrund)
a.place(x=0,y=0,width=640,height=400)

Ok, habs jetzt verbessert, jedoch wenn ich mein PNG Bild mit Transparentem Hintergrund einfüge, hat es immer noch einen Hintergrund und ist nicht transparent.

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 23:07
von BlackJack
@M96Wayne: Was meinst Du mit „es hat immer noch einen Hintergrund”? Da wo das Bild transparent ist sollte jetzt die Hintergrundfarbe der Schaltfläche durchscheinen. Ist jedenfalls bei mir so.

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 23:14
von M96Wayne
Ja, den Hintergrund der Schaltfläche hat es bei mir auch (das Gräulich-Weiße), jedoch will ich, dass bis auf mein Symbol alles transparent ist, sodass ich wenn ich einen Hintergrund einfüge nur das Symbol sehe und nich noch die Hintergrundfarbe der Schaltfläche

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 23:26
von BlackJack
@M96Wayne: Das geht nicht. Schalflächen haben immer eine Hintergrundfarbe. Was willst Du denn *eigentlich* damit erreichen?

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 23:29
von M96Wayne
Wollte einen Pfeil als Button darstellen der über meinem Hintergrundbild liegt. Das Hintergrundbild wechselt ständig, deswegen kann ich den Hintergrund von dem Pfeil auch nicht daran anpassen.

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 23:50
von BlackJack
@M96Wayne: Was bedeutet „ständig”? Man könnte schon jedes mal wenn man den Hintergrund wechselt auch ein entsprechendes Bild für die Schaltfläche erstellen.

Re: Transparente Bilder in Python einfügen

Verfasst: Freitag 20. Juni 2014, 23:55
von M96Wayne
Ich habe wahrscheinlich 50 oder mehr Hintergrundbilder, die ich da miteinbringen muss, dazu müsste ich dann ~50mal die Hintergrundfläche ändern. Ist auch nicht gerade das Wahre. Hatte gehofft man könnte es ganz Transparent machen. :wink:

Re: Transparente Bilder in Python einfügen

Verfasst: Samstag 21. Juni 2014, 00:12
von BlackJack
@M96Wayne: Wo ist denn das Problem dabei? Wenn man den Hintergrund der Schaltfläche transparent machen könnte, dann passiert doch vom Programmablauf her genau das gleiche. Wenn man ein neues Hintergrundbild setzt, muss die Grafik auf der Schaltfläche neu berechnet werden, damit dort das neue Bild ”durchscheint” Dann gäbe es den Code schon in Tkinter. So musst Du selber ein paar Zeilen schreiben.