dargesteltes Bild erneuern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ThoNel
User
Beiträge: 4
Registriert: Samstag 20. Juli 2019, 06:54

Hallo,
ich habe folgendes Problem. Ich lasse mit mit dem Befehl .show() ein Bild darstellen. Dieses Bild wird nun verändert und soll wieder dargestellt werden. Wenn ich nun aber wieder mit den show() Befehl arbeite wird immer wieder ein neues Fenster geöffnet. Kann man dies verhindern? Gibt es also einen Befehl, der ein dargestelltes Bild aktualisiert? Oder gibt es alternativ die Möglichkeit das alte Fenster zu schließen, ehe man mit .show() ein neues öffnet?

Besten Dank schon einmal im Voraus an alle Mitdenker
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Welches ".show()"? Aus dieser Bemerkung alleine wird hier niemand schlau. Bitte zeig uns deinen Code, in den dafuer vorgesehen code-tags. Dazu im vollstaendigen Editor den Code markieren und </> druecken.
ThoNel
User
Beiträge: 4
Registriert: Samstag 20. Juli 2019, 06:54

Danke für die schnelle Antwort:
Es geht um ein kleines Programm, dass mehrere Bilder addieren soll. Hier ist der Code:

Code: Alles auswählen

from PIL import Image
import os
import numpy



os.chdir(".../Downloads/Testbilder/")



image1 = Image.open("DSC_1.jpg")
image1.show()

image2 = Image.open("DSC_2.jpg")


n_img1 = numpy.asarray(image1)
n_img2 = numpy.asarray(image2)
Stack = (n_img1 +n_img2)
Bild = Image.fromarray(Stack.astype(numpy.uint8))
Bild.show()
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist schlicht nicht der geeignete Mechanismus. Wie es in der Doku zu show selbst steht: "mainly intended for debugging purposes". https://pillow.readthedocs.io/en/3.1.x/ ... Image.show

Denn du kannst nicht angeben, unter welchen Bedingungen das Programm weiter fortgesetzt werden soll.

Zur Darstellung solltest du daher ein anderes Framework benutzen. ZB tkinter (kommt mit Python mit), oder 3rd-Party Pakete wie pygame oder OpenCV - je nach Anwendung.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ThoNel: `os.chdir()` ist eine Funktion von der man eher die Finger lassen sollte. Das ändert globalen Zustand, skaliert schlecht, um wenn man nicht aufpasst, macht man irgendwann Sachen mit relativen Pfaden in der Annahme das Arbeitsverzeichnis befände sich ganz woanders. Schau Dir mal das `pathlib`-Modul an.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
ThoNel
User
Beiträge: 4
Registriert: Samstag 20. Juli 2019, 06:54

Danke für die Antworten, ich versuche mal mit tkinter zurechtzukommen
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
from pathlib import Path
import tkinter as tk

import numpy as np
from PIL import Image, ImageTk

IMAGES_PATH = Path(".../Downloads/Testbilder/")


class MainFrame(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.image = Image.open(str(IMAGES_PATH / "DSC_1.jpg"))
        self.tk_image = ImageTk.PhotoImage(self.image)
        self.label = tk.Label(self, image=self.tk_image)
        self.label.pack()
        self.button = tk.Button(self, text="Add", command=self.add_image)
        self.button.pack()

    def add_image(self):
        self.tk_image = ImageTk.PhotoImage(
            Image.fromarray(
                (
                    np.asarray(self.image)
                    + np.asarray(Image.open(str(IMAGES_PATH / "DSC_2.jpg")))
                ).astype(np.uint8)
            )
        )
        self.label["image"] = self.tk_image
        self.button["state"] = tk.DISABLED


def main():
    root = tk.Tk()
    main_frame = MainFrame(root)
    main_frame.pack()
    root.mainloop()


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
ThoNel
User
Beiträge: 4
Registriert: Samstag 20. Juli 2019, 06:54

super, besten Dank für deine Bemühungen.
Ich probiere es nachher mal aus
Antworten