Seite 1 von 1
dargesteltes Bild erneuern
Verfasst: Donnerstag 29. August 2019, 14:20
von ThoNel
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
Re: dargesteltes Bild erneuern
Verfasst: Donnerstag 29. August 2019, 14:24
von __deets__
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.
Re: dargesteltes Bild erneuern
Verfasst: Donnerstag 29. August 2019, 14:42
von ThoNel
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()
Re: dargesteltes Bild erneuern
Verfasst: Donnerstag 29. August 2019, 14:46
von __deets__
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.
Re: dargesteltes Bild erneuern
Verfasst: Donnerstag 29. August 2019, 15:01
von __blackjack__
@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.
Re: dargesteltes Bild erneuern
Verfasst: Donnerstag 29. August 2019, 15:05
von ThoNel
Danke für die Antworten, ich versuche mal mit tkinter zurechtzukommen
Re: dargesteltes Bild erneuern
Verfasst: Donnerstag 29. August 2019, 16:37
von __blackjack__
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()
Re: dargesteltes Bild erneuern
Verfasst: Donnerstag 29. August 2019, 20:18
von ThoNel
super, besten Dank für deine Bemühungen.
Ich probiere es nachher mal aus