Transparente Bilder in Python einfügen

Fragen zu Tkinter.
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

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
Schorlem
User
Beiträge: 40
Registriert: Dienstag 3. Juni 2014, 16:37

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 ;)
Diese Nachricht wurde maschinell erstellt und ist daher ohne Unterschrift gültig.
BlackJack

Für Python 3 gäbe es dann `pillow`, was so grundsätzlich die gleiche API wie `PIL` bietet.
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

Und wie füge ich das im Programmtext hinzu, also ich meine jetzt das Transparente Bild.
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.
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

Ok! Vielen Dank, ich werde es versuchen! :)
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

TypeError: 'module' object is not callable
--> Bekomme den Error in der Zeile:
Hintergrund = PIL.ImageTk('back.png')
Schorlem
User
Beiträge: 40
Registriert: Dienstag 3. Juni 2014, 16:37

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)".
Diese Nachricht wurde maschinell erstellt und ist daher ohne Unterschrift gültig.
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

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?
BlackJack

@M96Wayne: Du musst das Modul importieren, von alleine passiert das nicht.
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

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.
Zuletzt geändert von Anonymous am Freitag 20. Juni 2014, 22:39, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@M96Wayne: Schau Dir mal die Dokumentation zu `PhotoImage` an, welche Argumente man da übergeben kann.
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

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.
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.
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

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
BlackJack

@M96Wayne: Das geht nicht. Schalflächen haben immer eine Hintergrundfarbe. Was willst Du denn *eigentlich* damit erreichen?
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

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.
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.
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

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:
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.
Antworten