import os
import tkinter as tk
from tkinter import filedialog, ttk
import pyautogui
import cv2
import h5py
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from numpy.linalg import norm
from PIL import Image, ImageTk
import time
from termcolor import colored
from Ham_Img_Analyzer import featHA
import threading
import time
import atexit
from tkinter import messagebox
from tkinter import PhotoImage
class Timer:
    def __init__(self):
        self.seconds = 0
        self.time_str = ""

    def run(self):
        """A function to show a timer that updates every second."""
        
        while not self.stop_event.is_set():
        
            m, s = divmod(self.seconds, 60)
            self.time_str = "{:02d}:{:02d}".format(m, s)
            print(colored("Elapsed time: {}\r".format(self.time_str),"green"), end="")
            time.sleep(1)
            self.seconds += 1
        
             
    def start(self):
        self.stop_event = threading.Event()
        self.timer_thread = threading.Thread(target=self.run)
        self.timer_thread.start()

    def stop(self):
        self.stop_event.set()
        self.timer_thread.join()

    def get_elapsed_time(self):
        return self.time_str


        


class ScrollableImageGallery(tk.Frame):
    def __init__(self, master=None, **kwargs):
        super().__init__(master, **kwargs)
        
        self.canvas = tk.Canvas(self, borderwidth=0, highlightthickness=0)
        self.hscrollbar = ttk.Scrollbar(self, orient=tk.HORIZONTAL, command=self.canvas.xview)
        self.vscrollbar = ttk.Scrollbar(self, orient=tk.VERTICAL, command=self.canvas.yview)
        self.scrollable_frame = tk.Frame(self.canvas)
        
        self.scrollable_frame.bind("<Configure>", lambda e: self.canvas.configure(scrollregion=self.canvas.bbox("all")))
        
        self.canvas.create_window((0, 0), window=self.scrollable_frame, anchor="nw")
        self.canvas.configure(xscrollcommand=self.hscrollbar.set, yscrollcommand=self.vscrollbar.set)
        
        self.canvas.pack(side="left", fill="both",expand=True)
        self.hscrollbar.pack(side="bottom", fill="x")
        self.vscrollbar.pack(side="right", fill="y")
        
        self.load_images(image_index) # Replace with the path to your image folder
        
    def load_images(self, folder):
        # image_files = os.listdir(folder)
        images = []
        row_num = 0
        col_num = 0
        
        for image_path in image_index:
          
            image = Image.open(image_path)
            file=(image_path.split("\\")[-1])
            images.append((file, image)) # Add file name to tuple     
        for i, (file, image) in enumerate(images):
            image=image.resize((image_width,image_height))
            photo = ImageTk.PhotoImage(image)
            label = tk.Label(self.scrollable_frame, image=photo)
            label.image = photo
            label.grid(row=row_num, column=col_num, padx=0, pady=3)
            # title = tk.Label(self.scrollable_frame, text=file.split('.')[0])
            if 1<=image_number<=5:
                fontsize=10
            elif  6<=image_number<=7:
                fontsize=6
            elif 8<=image_number<=12:
                fontsize=4
            elif 13<=image_number<=16:
                fontsize=3
            elif 17<=image_number<=20:
                fontsize=2
            title = tk.Label(self.scrollable_frame, text=str(i+1)+"."+file,font=("Arial",fontsize))
        
            title.grid(row=row_num+1 , column=col_num) # Add title label below image label
            
            
            col_num +=1

           
            if col_num == image_number:
                col_num = 0
                # row_num +=image_number
                row_num +=2
            
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

image_number=1
screen_width,screen_height=pyautogui.size()
if image_number==None:
    image_number=5
image_width=((screen_width-120)//(image_number))-2
image_height=image_width*3//4           
if image_height>=screen_height:
    image_height=screen_height*3//4
f = open(r"C:\Users\VAIO\Desktop\DSC\Ham Model\Source_Image_paths_feather_path.txt", "r")
bank_path=f.readline().rstrip()
bank_path=bank_path[:-2]
feath_path=f.readline().rstrip()
f.close()



import glob
image_index=glob.glob(r"C:\Users\VAIO\Desktop\DSC\TEST_HAM\Image Samples\sample\*")
image_index=(image_index[:200])
 

         
root = tk.Tk()
root.geometry(str(screen_width)+"x"+str(screen_height))
phot=PhotoImage(file=r"C:\Users\VAIO\Desktop\DSC\Ham Model\turtle.png")
root.iconphoto(False,phot)
root.title("*HamNet* Gallery")

scrollable_gallery = ScrollableImageGallery(root)
scrollable_gallery.pack(fill="both", expand=True)



root.mainloop()

I wanted to show 200 images

If i put imagenumber=2, i expect to show 2 images in every row. accordingly when imagenumber=1 i want to show 1 image in every row i . but for imagenumber=2 it shows images with defects after image 14 and it does not show all the images. for image_number=1 it shows images with defects after image 38 and it does not show all the images also. On the other hand, for image_number 3 to 20 it shows all the images correctly..

0

There are 0 best solutions below