2017-07-11 2 views
0

Also, ich versuche, ein Bild zu laden und auf eine Leinwand, wie hier ziehen:Warum wird self.img als int interpretiert?

self.field = tk.Canvas(height=310, width=450, bg="white", highlightthickness=0) 
    self.field.pack(side=tk.TOP) 

    photo = tk.PhotoImage(file=os.path.join(os.path.dirname(__file__), "Photos","Image.png")) 
    self.img = self.field.create_image(155, 225, image=photo) 
    print(self.img) # apparently prints "1". 
    self.img.image = sprite # blows up with AttributeError: 'int' object has no attribute 'image' 

jedoch, wie in der letzten Zeile, zieht es erfolgreich, sondern auch die Luft fliege mit dem Fehler, den ich erwähnte in der letzten Zeile.

Warum interpretiert es eine Leinwandzeichnung als int? (wie in der Druckzeile gezeigt)

EDIT: nichts dagegen das Format, tkinter seltsam, wie in meiner Version unterstützt. Png ohne PIL benötigt.

+0

Können Sie das gesamte Objekt veröffentlichen? – patrick

+3

'tk.Canvas.create_image' gibt die Item-ID zurück, die eine ganze Zahl ist –

+0

Wie interpretiere ich es als Bild? Wenn ich die Fehlerzeile herausnehme, wird das Bild nicht angezeigt. –

Antwort

2

Es ist wichtig zu wissen, welche Methoden Sie aufrufen. In diesem Fall rufen Sie die create_image-Methode für ein tkinter-Canvas-Objekt (self.field) auf. Nach der Dokumentation (oder zumindest einig Dokumentation fand ich über Google - ich bin mit tkinter nicht super vertraut):

Dieser Konstruktor gibt die Ganzzahl-ID-Nummer des Bildobjekts für die Leinwand.

(http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/create_image.html)

Sie sind also self.img der ID-Nummer des Bildobjekts innerhalb des Canvas-Objekt einstellen - nicht das Bildobjekt selbst, die auf dem Canvas-Objekt zu sein, interne scheint. Suchen Sie nach anderen Canvas-Methoden, um das Bild zu ändern. Offenbar gibt es Funktionen, die die resultierende Objekt-ID zum Ändern des Elements verwenden, z. B. Canvas.itemconfig (...) oder Canvas.coords (...).

Verwandte Themen