Bild einfügen
@Xfd7887a: Okay, und es ist im GIF-Format? Wenn nein, wie sieht die Fehlermeldung und der Code dazu aus.
@Xfd7887a: Dein Tk kann PNGs lesen? Und das auch noch mit Transparenz? Cool. Du solltest eher nicht davon ausgehen dass das mit Tk generell funktioniert.
Ich bin ja immer noch total überrascht das Du beim Versuch ein PNG zu laden nicht das hier bekommst:
Von Haus aus versteht Tk nur GIF, PPM, und PGM als Formate und von denen hat nur GIF Transparenz. Und da auch nur 1-Bit-Transparenz, also ein Pixel ist entweder vollständig transparent oder vollständig deckend.
Um andere Formate zu laden braucht man zusätzlichen Code zum Beispiel in Form einer Bibliothek. Entweder für Tk oder auf Python-Seite. Und man muss einen Blick auf die Tk-Version werfen wenn man mehr als 1-Bit-Transparenz haben möchte, denn vor Tk 8.4 war nur das möglich.
Code: Alles auswählen
In [6]: p = tk.PhotoImage(file='test.png')
---------------------------------------------------------------------------
TclError Traceback (most recent call last)
<ipython-input-6-f0977c0bf5f9> in <module>()
----> 1 p = tk.PhotoImage(file='test.png')
/usr/lib/python2.7/lib-tk/Tkinter.pyc in __init__(self, name, cnf, master, **kw)
3245 Valid resource names: data, format, file, gamma, height, palette,
3246 width."""
-> 3247 Image.__init__(self, 'photo', name, cnf, master, **kw)
3248 def blank(self):
3249 """Display a transparent image."""
/usr/lib/python2.7/lib-tk/Tkinter.pyc in __init__(self, imgtype, name, cnf, master, **kw)
3201 v = self._register(v)
3202 options = options + ('-'+k, v)
-> 3203 self.tk.call(('image', 'create', imgtype, name,) + options)
3204 self.name = name
3205 def __str__(self): return self.name
TclError: couldn't recognize data in image file "test.png"
Um andere Formate zu laden braucht man zusätzlichen Code zum Beispiel in Form einer Bibliothek. Entweder für Tk oder auf Python-Seite. Und man muss einen Blick auf die Tk-Version werfen wenn man mehr als 1-Bit-Transparenz haben möchte, denn vor Tk 8.4 war nur das möglich.
@Xfd7887a: Dann machst Du irgend etwas falsch. Da Du es erfolgreich schaffst so wenig Informationen wie überhaupt möglich zu verraten, kann man schlecht sagen was das ist.
Bilder mit Transparenz anzeigen kann man notwendigerweise auch so machen ...
Code: Alles auswählen
# explore Tkinter transparency (simplified)
try:
# Python2
import Tkinter as tk
except ImportError:
# Python3
import tkinter as tk
root = tk.Tk()
# use opacity alpha values from 0.0 to 1.0
# opacity/tranparency applies to image and root frame
root.wm_attributes('-alpha', 0.7)
# use a GIF image you have in the working directory
# or give full path
photo = tk.PhotoImage(file="LAKE.gif")
tk.Label(root, image=photo).pack()
root.mainloop()
Atomkraftwerkaktienbesitzer
@Ene Uran: *Das* macht jetzt aber das ganze Fenster transparent. Das ist hier ja gar nicht gefragt. Funktioniert ausserdem nicht plattformübergreifend.
Hier sollen Teile einer Grafik transparent sein, zum Beispiel um viele niedliche kleine Hoppelhäschen in einem Fenster anzuzeigen die sich teilweise verdecken, weil sie sonst nicht alle auf den Bildschirm passen. Aber eben nicht überlappende Rechtecke sondern in ”Häschenform”.
Hier sollen Teile einer Grafik transparent sein, zum Beispiel um viele niedliche kleine Hoppelhäschen in einem Fenster anzuzeigen die sich teilweise verdecken, weil sie sonst nicht alle auf den Bildschirm passen. Aber eben nicht überlappende Rechtecke sondern in ”Häschenform”.