image in Canvas

Fragen zu Tkinter.
Antworten
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Wenn ich durch create_image ein image Canvas Item erzeugt habe, bekomme ich mit img = self.itemcget(self.item_id,'image') nur den Namen des images, etwa 'pyimage2'.

Kann ich mit Hilfe dieses Names auch das PhotoImage bekommen?
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Alfons

Kannst du das folgenden einmal angucken:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from functools import partial

try:
    # Tkinter for Python 2.xx
    import Tkinter as tk
except ImportError:
    # Tkinter for Python 3.xx
    import tkinter as tk

APP_TITLE = "Image in Canvas1"
APP_XPOS = 100
APP_YPOS = 100
APP_WIDTH = 300
APP_HEIGHT = 200


class Application(tk.Frame):

    def __init__(self, master):
        self.master = master
        tk.Frame.__init__(self, master)

        canvas = tk.Canvas(self, bg='steelblue', highlightthickness=0)
        canvas.pack(fill='both', expand=True)
        self.image = tk.PhotoImage(file="test_image.gif")
        
        name_photoimage = str(self.image)
        print("Bildname des Photoimage", name_photoimage)
        
        # Erzeugen des Bildes mittels 'pyimage1'
        canvas.create_image(10, 10, image=name_photoimage, anchor='nw')
        
        
def main():
    app_win = tk.Tk()
    app_win.title(APP_TITLE)
    app_win.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
    app_win.geometry("{}x{}".format(APP_WIDTH, APP_HEIGHT))
    
    app = Application(app_win).pack(fill='both', expand=True)
    
    app_win.mainloop()
 
 
if __name__ == '__main__':
    main()      
Gruss wuf :wink:
Take it easy Mates!
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@wuf: Danke, ja das geht schon. Ich hatte aber im image einen filenamen angefügt und dachte ich könnte das image wieder bekommen. Das geht aber nicht. Daher muss ich es so lassen und den filenamen mitführen oder eine Referenz auf das image-

Bei Gelegenheit mache ich eine Referenz auf das image, weil ich da eine weitere Information ablegen kann, nämlich wo es herkommt, aus PhotoImage oder aus ImageTk.PhotoImage(Image(open(filename)))

Damit ich es dann nicht wegen der File Extension (.gif) als PhotoImage wieder erzeuge, sondern nur, wenn die Herkunft ein PhotoImage war.
Antworten