Wie fügt man Images bei GUIs in Python ein? Ich habe das in einem Tutorial gesehen das war aber 2016! Das klappt 2021 nicht mehr! Kann mir jemand zeigen, wie?

1 Antwort

Hier ein Beispielcode:

from tkinter import*
tk = Tk()
canvas = Canvas(tk, width=1000, height=600)
canvas.pack()
mein_Bild = PhotoImage(file='c:\\test.gif')
canvas.create_image(0, 0, anchor=NW, image=mein_Bild)

Ich würde aber bei der Bilddatei keinen absoluten Pfad nehmen, sondern einen relativen Pfad. Die Bilddatei muss sich im gleichen Ordner befinden wie die .py Datei.


NeilderMensch 
Fragesteller
 09.01.2021, 06:45

was ist der unterschied zwischen absolut und relativ? ich bin 11

0
NeilderMensch 
Fragesteller
 09.01.2021, 06:49

Bei mir steht immer:

line 2, in <module>

  tk = Tk()

NameError: name 'Tk' is not defined

0
mnlwrnr  09.01.2021, 08:46
@NeilderMensch

Probiere mal diesen Code:

from tkinter import * 
from PIL import Image, ImageTk 
from random import * 

class App(object): 

    def __init__(self): 
     self.root = Tk() 
     self.canvas = Canvas(self.root, height=222, width=227) 
     self.canvas.grid() 
     # small nature landscape 
     self.backgnd = PhotoImage(file = "images/nature.png") 
     # small white circle 
     self.mycloud = PhotoImage(file = "images/white.png") 
     backgnd_width = (self.backgnd.width()/2) 
     backgnd_height = (self.backgnd.height()/2) 
     self.canvas.create_image(backgnd_width,backgnd_height,image=self.backgnd) 

    def cloud(self): 
     pos_x = randint(1,220) 
     pos_y = randint(1,220) 
     self.canvas.create_image(pos_x,pos_y, image=self.mycloud) 


app = App() 
app.cloud() 
app.cloud() 
app.cloud() 
app.cloud() 
app.cloud() 
app.root.mainloop() 
1
NeilderMensch 
Fragesteller
 09.01.2021, 10:16
@mnlwrnr

Bei mir kommt die Felehrmeldung

Traceback (most recent call last):

 File "C:/Users/Neil/PycharmProjects/Password cracker/)=.py", line 25, in <module>

  app = App()

 File "C:/Users/Neil/PycharmProjects/Password cracker/)=.py", line 12, in __init__

  self.backgnd = PhotoImage(file = "images/nature.png")

 File "C:\Users\Neil\anaconda\lib\tkinter\__init__.py", line 4061, in __init__

  Image.__init__(self, 'photo', name, cnf, master, **kw)

 File "C:\Users\Neil\anaconda\lib\tkinter\__init__.py", line 4006, in __init__

  self.tk.call(('image', 'create', imgtype, name,) + options)

_tkinter.TclError: couldn't open "images/nature.png": no such file or directory

0
mnlwrnr  09.01.2021, 11:00
@NeilderMensch

Man muss bei "images/nature.png" und "images/white.png" den relativen Pfad zu deinen Bilddateien mit dem Namen der Bilddateien angeben.

0
NeilderMensch 
Fragesteller
 09.01.2021, 11:31
@mnlwrnr

Neue Felehrmeldung:

Traceback (most recent call last):

 File "C:/Users/Neil/PycharmProjects/Password cracker/)=.py", line 25, in <module>

  app = App()

 File "C:/Users/Neil/PycharmProjects/Password cracker/)=.py", line 12, in __init__

  self.backgnd = PhotoImage(file = "images/Illusion.png")

 File "C:\Users\Neil\anaconda\lib\tkinter\__init__.py", line 4061, in __init__

  Image.__init__(self, 'photo', name, cnf, master, **kw)

 File "C:\Users\Neil\anaconda\lib\tkinter\__init__.py", line 4006, in __init__

  self.tk.call(('image', 'create', imgtype, name,) + options)

_tkinter.TclError: couldn't open "images/Illusion.png": no such file or directory

0
mnlwrnr  09.01.2021, 14:12
@NeilderMensch

Eine weitere Möglichkeit wäre noch indem man PAGE verwendet. Das ist ein Tkinter GUI Designer. Er ist vergleichbar wie der Formdesigner bei Visual Studio. Damit geht das ganze einfacher. Auch die Funktion Bilder einzufügen geht damit einfacher. https://sourceforge.net/projects/page/files/page/6.0.1/

Die EXE ist für Windows und die tgz ist für Mac und Linux.

0