Ich erstelle eine (unendliche) scrollbare GUI, die 100x100px Thumbnails aus möglicherweise 100 000 Bilddateien (JPG) in Python tkinter . funktioniert: < /p>
Verwenden von Lazy Loading: Es lädt 30 neue Bilder neu, wenn die Scrollbar das Ende erreicht, , aber aber Es wird nicht skaliert, wenn Sie 100K -Bilder durchsuchen, da das Objekt Canvas immer größer und größer und überlaufend wird.
Welches UI -Element soll dafür verwendet werden? Gibt es einen tk.frame oder tk.canvas , in dem Sie unten neue Inhalte hinzufügen können (z. y = 0..5 000 ) und dann die Leinwand verkleinern, z. B. entfernen /> oder vielleicht eine Leinwand -Frame -Datenstruktur, die "zyklen" wie ein kreisförmiger Puffer? Dies würde vermeiden, dass die Höhe der Leinwand explodiert und immer 10 000 Pixel hoch bleibt. Wenn wir y = 9 000 erreichen, werden alte Bilder bei y = 0..1 000 durch neue ersetzt, und wenn wir bei y = 10 000 in der Tat scrollen Zurück zu y = 0 . Gibt es das? /> oder vielleicht ein anderes System mit Fliesen? (Aber ich sehe nicht wie) < /p>
Hinweise: < /p>
Viele Bildzuschauer mögen Google Picasa ( Freeware Long Decontined) Tun Sie Folgendes:
< /p>
Beachten Sie, dass die rechte vertikale Bildlaufleiste den eigentlichen Fortschritt nicht widerspiegelt < /p>
< /li>
< /ul>
Code: < /p>
Ich erstelle eine (unendliche) scrollbare GUI, die 100x100px Thumbnails aus möglicherweise 100 000 Bilddateien (JPG) in Python tkinter . funktioniert: < /p>
Verwenden von Lazy Loading: Es lädt 30 neue Bilder neu, wenn die Scrollbar das Ende erreicht, [b], aber aber Es wird nicht skaliert, wenn Sie 100K -Bilder [/b] durchsuchen, da das Objekt Canvas immer größer und größer und überlaufend wird. Welches UI -Element soll dafür verwendet werden? Gibt es einen tk.frame oder tk.canvas , in dem Sie unten neue Inhalte hinzufügen können (z. y = 0..5 000 ) und dann die Leinwand verkleinern, z. B. entfernen /> oder vielleicht eine Leinwand -Frame -Datenstruktur, die "zyklen" wie ein kreisförmiger Puffer? Dies würde vermeiden, dass die Höhe der Leinwand explodiert und immer 10 000 Pixel hoch bleibt. Wenn wir y = 9 000 erreichen, werden alte Bilder bei y = 0..1 000 durch neue ersetzt, und wenn wir bei y = 10 000 in der Tat scrollen Zurück zu y = 0 . Gibt es das? /> oder vielleicht ein anderes System mit Fliesen? (Aber ich sehe nicht wie) < /p> Hinweise: < /p>
Viele Bildzuschauer mögen Google Picasa ( Freeware Long Decontined) Tun Sie Folgendes: < /p> Beachten Sie, dass die rechte vertikale Bildlaufleiste den eigentlichen Fortschritt nicht widerspiegelt < /p> < /li> < /ul> Code: < /p> [code]import os, tkinter as tk, tkinter.ttk as ttk, PIL.Image, PIL.ImageTk class InfiniteScrollApp(tk.Tk): def __init__(self, image_dir, *args, **kwargs): super().__init__(*args, **kwargs) self.geometry("800x600") self.image_files = [os.path.join(root, file) for root, dirs, files in os.walk(image_dir) for file in files if file.lower().endswith(('.jpg', '.jpeg'))] self.image_objects = [] self.canvas = tk.Canvas(self, bg="white") self.scrollbar = ttk.Scrollbar(self, orient="vertical", command=self.yview) self.canvas.configure(yscrollcommand=self.scrollbar.set) self.scrollbar.pack(side="right", fill="y") self.canvas.pack(side="left", fill="both", expand=True) self.frame = tk.Frame(self.canvas, width=self.canvas.winfo_width()) self.canvas.create_window((0, 0), window=self.frame, anchor="nw") self.canvas.bind_all("", self.on_scroll) self.load_images() def yview(self, *args): self.canvas.yview(*args) self.update() def update(self): canvas_height = self.canvas.bbox("all")[3] scroll_pos = self.canvas.yview()[1] if scroll_pos > 0.9: self.load_images() def load_images(self): current_image_count = len(self.image_objects) for i in range(current_image_count, current_image_count + 30): if i < len(self.image_files): image_path = self.image_files[i] img = PIL.Image.open(image_path) img.thumbnail((100, 100)) photo = PIL.ImageTk.PhotoImage(img) label = tk.Label(self.frame, image=photo) label.image = photo label.pack(pady=5, padx=10) self.image_objects.append(label) self.frame.update_idletasks() self.canvas.config(scrollregion=self.canvas.bbox("all")) def on_scroll(self, event): self.canvas.yview_scroll(-1 * (event.delta // 120), "units") self.update() app = InfiniteScrollApp("D:\images") app.mainloop() < /code>
Beispielbilder < /h2> Beispielcode zum Erstellen von 10K -Bildern schnell mit einer darauf gezeichneten Textnummer: < /p >
from PIL import Image, ImageDraw, ImageFont import random for i in range(10000): img = Image.new('RGB', (200, 200), (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))) draw = ImageDraw.Draw(img) font = ImageFont.truetype("arial.ttf", 30) draw.text((10, 10), str(i), font=font, fill=(0, 0, 0)) img.save(f'color_image_{i:04d}.jpg') [/code]
Nach dem Titel dieses Beitrags scheint mein Problem vielleicht sehr vage zu sein, aber ich konnte mir keine kurze Erklärung für mein Problem einfallen lassen.
Ich erstelle eine WordPress-Website für...
Ich möchte einen ähnlichen Effekt erstellen, der ähnlich wie diese Website entspricht. Ich habe mehrere Ansätze ausprobiert, aber ich konnte diesen Effekt nicht erreichen.
Meine Website: Hero...
Ich möchte einen ähnlichen Effekt erstellen, der ähnlich wie diese Website entspricht. Ich habe mehrere Ansätze ausprobiert, aber ich konnte diesen Effekt nicht erreichen.
Meine Website: Hero...
Wie kann man ein Diagramm in Python sauber darstellen? (Von Grund auf neu beginnen, d. h. keine Bibliotheken!)
Welche Datenstruktur (z. B. Diktate/Tupel/Dikt(Tupel)) ist schnell, aber auch...