Diese eine Zeile Code...

Fragen zu Tkinter.
Antworten
MiniDeveloper
User
Beiträge: 25
Registriert: Sonntag 3. Juni 2018, 15:09

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
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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 ;-)
Take it easy Mates!
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

@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")
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

@__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()
Take it easy Mates!
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

@__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.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

__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.
Take it easy Mates!
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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 ;-)
Take it easy Mates!
MiniDeveloper
User
Beiträge: 25
Registriert: Sonntag 3. Juni 2018, 15:09

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! :)
Antworten