Seite 1 von 1

Diese eine Zeile Code...

Verfasst: Dienstag 5. Juni 2018, 15:58
von MiniDeveloper
Hi da draußen!
Ich habe jetzt schon zwei Fragen für ein Problem hier gestellt, aber anscheinend ist es auf diese Art nicht zu lösen...

Ich habe in meinem Code folgende Zeile:

Code: Alles auswählen

self.imgSplash = ImageTk.PhotoImage(self.gambar)
Kann man diese Zeile auch ohne ImageTk programmieren, und wenn ja, wie?
Wäre euch für Hilfe sehr Dankbar :)

Mfg Mini Developer

Re: Diese eine Zeile Code...

Verfasst: Dienstag 5. Juni 2018, 16:40
von __deets__
Wieso sollte das nicht zu loesen sein? Ich habe dir in deinem anderen Thema gesagt, dass du Pillow installieren musst. Hast du das getan? Scheint nicht so, weil es nicht geklappt hat. Was erwartest du denn nun soll hier anders diskutiert werden? Du musst IMMER noch Pillow installieren. Glaub mir, das geht. Nur bitte nicht diese Diskussion auf immer mehr und mehr Threads verteilen.

Re: Diese eine Zeile Code...

Verfasst: Dienstag 5. Juni 2018, 16:46
von ThomasL

Re: Diese eine Zeile Code...

Verfasst: Dienstag 5. Juni 2018, 17:36
von wuf
Hi MiniDeveloper
self.imgSplash = ImageTk.PhotoImage(self.gambar)
Dies sollte auch auch ohne Pillow möglich sein:

Code: Alles auswählen

self.imgSplash = tk.PhotoImage(file='file.png')
Gruss wuf ;-)

Re: Diese eine Zeile Code...

Verfasst: Dienstag 5. Juni 2018, 17:59
von __deets__
@wuf: bei mir geht das nicht, da kommt

Code: Alles auswählen

>>> i = tk.PhotoImage(file="left-page-number-19.png")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 2095, in __getattr__
    return getattr(self.tk, attr)
AttributeError: '_tkinter.tkapp' object has no attribute 'PhotoImage'
Installiere ich hingegen Pillow, geht

Code: Alles auswählen

>>> import PIL.ImageTk
>>> i = PIL.ImageTk.PhotoImage(file="left-page-number-19.png")

Re: Diese eine Zeile Code...

Verfasst: Dienstag 5. Juni 2018, 18:39
von wuf
@__deets__

Beim mir funktionierts :-)

Code: Alles auswählen

import tkinter as tk

app_win = tk.Tk()

imgSplash = tk.PhotoImage(file='file.png')
tk.Label(app_win, image=imgSplash).pack(expand=True)

app_win.mainloop()

Re: Diese eine Zeile Code...

Verfasst: Dienstag 5. Juni 2018, 21:05
von __blackjack__
@__deets__: `tkinter.PhotoImage` sollte es eigentlich geben. Das wird auf Tk's `image create photo …` abgebildet. Ob das dann allerdings mit PNG-Dateien klar kommt hängt von der Tk-Version ab. Ältere können nur PPM/PGM und GIF, und unter Windows AFAIK noch BMP.

Re: Diese eine Zeile Code...

Verfasst: Dienstag 5. Juni 2018, 21:19
von __deets__
@__blackjack__: so wie angegeben getestet & nix passiert. Mehr kann ich dazu auch nicht sagen. Und das die PNG koennen wie wuf behauptet waere mir auch neu, und steht ja auch im Widerspruch zu dem was du sagst. Ggf. besteht da zur Fehlermeldung ein Zusammenhang, aber das waere eher obskur.

Nachtrag: jetzt gerade erst gesehen, was wuf gepostet hat. Der Fehler aendert sich:

Code: Alles auswählen

[deets@paleale circular-buffer (master)]$ python3.6
Python 3.6.3 (v3.6.3:2c5fed86e0, Oct  3 2017, 00:32:08)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter as tk
>>>
>>> app_win = tk.Tk()
>>>
>>> imgSplash = tk.PhotoImage(file="left-page-number-19.png")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 3539, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 3495, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't recognize data in image file "left-page-number-19.png"
>>>
Klappen tut es immer noch nicht. Woher der Fehler vorher kam - kA. Aber fuer PNGs braucht man AFAIK immer noch Pillow. Und das muss der TE halt installieren, was er inzwischen etwa 15 mal gesagt bekommen hat.

Re: Diese eine Zeile Code...

Verfasst: Dienstag 5. Juni 2018, 22:59
von __blackjack__
In der neuesten Tk-Version (8.6) kann Tk auch PNG.  Das ist im Debian auf meinem Raspi zum Beispiel in den Paketquellen. Aus der Tk Doku:
The standard Tk distribution comes with handlers for PPM/PGM, PNG and GIF formats, […]
Für andere Formate wie JPEG oder wenn man an den Bildern etwas ändern möchte, ist Pillow natürlich immer noch eine gute Idee.

Re: Diese eine Zeile Code...

Verfasst: Dienstag 5. Juni 2018, 23:05
von wuf
__deets__ hat geschrieben:Und das die PNG koennen wie wuf behauptet waere mir auch neu
Bitte ich behaupte hier gar nix! Es ist ein Fakt ab der Version Tk 8.6 wird das .png Format für PhotoImage unterstützt.

Re: Diese eine Zeile Code...

Verfasst: Dienstag 5. Juni 2018, 23:08
von __deets__
Ah. Ich bin unterm Mac unterwegs. Das ist tk 8.5 oder so. Macht aber ggf auch beim TE den Unterschied. Je nach raspibian.

@wuf: ich entschuldige mich für die harsche Formulierung. Die längste Zeit konnte tk das nicht. Aber ich hätte mich mehr wundern sollen warum dein Code bei dir ging & nicht bei mir.

Re: Diese eine Zeile Code...

Verfasst: Mittwoch 6. Juni 2018, 07:39
von wuf
Hi __deets__

Ok. Mein Setup hier ist:
Ubuntu 18.04 und Windows 10 mit:
Python 3.5.2
Tk8.6

Mein Skript läuft auf beiden Plattformen ohne zu motzen. Wusste nicht, dass es unter Mac eventuell Probleme macht.

Gruss wuf ;-)

Re: Diese eine Zeile Code...

Verfasst: Mittwoch 6. Juni 2018, 19:11
von MiniDeveloper
Wuf, du bist der beste!

Mein Problem ist endlich gelöst!

Es hat funktioniert und jetzt läuft der Splash auch in Python 3 :)
Ich weiß nicht wie ich dir danken soll!

Übrigens auch vielen Dank an alle anderen die sich die Mühe gemacht haben, mir zu helfen - super Forum! :)