ich stehe vor einem Problem, bei dem mir derzeit die Ideen ausgehen. Langfristiges Ziel ist eine kleine Applikation, mit der ich Fotos markieren kann. Später soll es möglich sein, das Foto so zu kennzeichnen, dass entweder eine erste Seite oder eine Folgeseite abgebildet ist. Dies wird später dazu verwendet, einzelne PDF-Files aus den jpg-Dateien zu generieren, von der ersten Seite bis zur nächsten ersten Seite.
Um zu entscheiden, ob eine erste Seite abgebildet ist, muss ich mir das Foto anschauen. Das ganze soll in einer sehr einfachen GUI passieren, die außer einem Label für die Darstellung der Fotos nur zwei Buttons für erste oder zweite Seite beinhaltet.
In meiner Testumgebung habe ich vier kleine jpg-Bilder mit der Bezeichnung image001.jpg bis image004.jpg.
Gebe ich bei der Instanzierung eine Liste mit bereits geladenen und in PhotoImage-Objekten mit, lassen sich diese in der Callback-Funktion wunderbar dem Label zuweisen (im Code mit der show_random_image()-Funktion). Es gelingt mir allerdings nicht, ein PhotoImage-Objekt zur laufzeit direkt in der Callback-Funktion zu erzeugen und dem Label zuzuweisen (im Code mit der load_image()-Funktion). Das Label fällt in dem Fall auf den Alternativ-Text zurück.
Code: Alles auswählen
import tkinter as tk
import tkinter.ttk as ttk
from random import choice
from PIL import ImageTk, Image
class App(tk.Frame):
def __init__(self, master, images):
super().__init__(master)
self.master = master
self.images = images
self.master.grid()
self.imagebox = ttk.Label(master, image = self.images[0], compound = "top", text="Alternative text")
self.imagebox.grid(column = 0, row = 0)
self.right_container = tk.Frame(self.master)
self.right_container.grid(column = 1, row = 0)
self.random_button = ttk.Button(self.right_container, text = "Show random image from list")
self.random_button.pack()
self.random_button.bind("<Button>", self.show_random_image)
self.load_from_file_button=ttk.Button(self.right_container, text= "Load image from file and show")
self.load_from_file_button.pack()
self.load_from_file_button.bind("<Button>", self.load_image)
def show_random_image(self, event):
print(event)
self.imagebox.configure(image = choice(self.images))
def load_image(self,event):
print(event)
self.imagebox.configure(image = ImageTk.PhotoImage(Image.open("image004.jpg")))
def main():
root = tk.Tk()
photo_images = []
photo_images.append(ImageTk.PhotoImage(Image.open("image001.jpg")))
photo_images.append(ImageTk.PhotoImage(Image.open("image002.jpg")))
photo_images.append(ImageTk.PhotoImage(Image.open("image003.jpg")))
image_application = App(root, photo_images)
image_application.mainloop()
if __name__ == "__main__":
main()
Vielen Dank im vorhinein
derHoepp