[Python] Button BACK not working in python graphic script

Discussão em 'Python' iniciado por Stack, Dezembro 21, 2024.

  1. Stack

    Stack Membro Participativo

    I have a python code with GUI. I want use this code to show images from different folders. I have buttons for the folders, one button to go FORWARD and one to go BACK. The code, after choosing the folder start showing images from the first one in sequence (names of each image are: 0_xxxx.jpg, 1_xxxx.jpg...). FORWARD works, BACK does not. Any suggestions?

    import os
    import tkinter as tk
    from PIL import Image, ImageTk

    # Funzione per ottenere il percorso assoluto della cartella corrente
    def get_current_folder():
    return os.path.dirname(os.path.abspath(__file__))

    # Funzione per caricare tutte le immagini di un gruppo (cartella) e ordinarle alfabeticamente
    def load_images_from_group(folder, group_name):
    group_folder = os.path.join(folder, group_name)
    if not os.path.exists(group_folder):
    print(f"Gruppo {group_name} non trovato!")
    return []

    supported_extensions = ('.png', '.jpg', '.jpeg', '.gif', '.bmp')
    images = []
    for file_name in os.listdir(group_folder):
    if file_name.lower().endswith(supported_extensions):
    images.append(os.path.join(group_folder, file_name))
    images.sort() # Ordina le immagini in ordine alfabetico
    return images

    # Funzione per cambiare l'immagine
    def change_image(img_list, index, label):
    image_path = img_list[index]
    img = Image.open(image_path)
    img = ImageTk.PhotoImage(img.resize((500, 500))) # Ridimensiona l'immagine per adattarla alla finestra
    label.config(image=img)
    label.image = img # Necessario per evitare che l'immagine venga "garbage collected"

    # Funzione per avanzare
    def next_image(img_list, index, label, btn_next, btn_prev):
    if index < len(img_list) - 1: # Controlla se non siamo all'ultima immagine
    index += 1
    change_image(img_list, index, label)
    if index == len(img_list) - 1: # Se siamo all'ultima immagine, disabilita il pulsante AVANTI
    btn_next.config(state=tk.DISABLED)
    btn_prev.config(state=tk.NORMAL) # Riabilita il pulsante INDIETRO
    return index

    # Funzione per tornare indietro
    def prev_image(img_list, index, label, btn_next, btn_prev):
    if index > 0: # Controlla se non siamo alla prima immagine
    index -= 1
    change_image(img_list, index, label)
    if index == 0: # Se siamo alla prima immagine, disabilita il pulsante INDIETRO
    btn_prev.config(state=tk.DISABLED)
    btn_next.config(state=tk.NORMAL) # Riabilita il pulsante AVANTI
    return index

    # Funzione per cambiare gruppo
    def change_group(group_name, folder, label, btn_next, btn_prev):
    global index, img_list
    img_list = load_images_from_group(folder, group_name) # Carica il gruppo di immagini
    if not img_list:
    print(f"Nessuna immagine trovata nel gruppo {group_name}.")
    return

    index = 0 # Reset dell'indice
    change_image(img_list, index, label) # Cambia la prima immagine

    # Abilita i pulsanti in base all'indice
    if len(img_list) > 1:
    btn_next.config(state=tk.NORMAL)
    btn_prev.config(state=tk.DISABLED) # Disabilita il pulsante INDIETRO se siamo alla prima immagine
    else:
    btn_next.config(state=tk.DISABLED) # Se c'è solo una immagine, disabilita AVANTI
    btn_prev.config(state=tk.DISABLED) # Disabilita anche INDIETRO se c'è solo una immagine

    # Funzione principale che crea la finestra e gestisce l'interfaccia
    def create_gui():
    global folder, index, img_list
    folder = get_current_folder() # Ottieni la cartella corrente

    # Crea la finestra principale
    root = tk.Tk()
    root.title("Visualizzatore di Immagini per Gruppo")

    # Etichetta per visualizzare le immagini
    label = tk.Label(root)
    label.pack(pady=20)

    # Inizializza l'indice dell'immagine corrente
    index = 0
    img_list = []

    # Frame per i pulsanti
    button_frame = tk.Frame(root)
    button_frame.pack(side=tk.BOTTOM, pady=10)

    # Pulsante per selezionare il gruppo "HOME"
    btn_HOME = tk.Button(button_frame, text="HOME", command=lambda: change_group("HOME", folder, label, btn_next, btn_prev))
    btn_HOME.pack(side=tk.LEFT, padx=10)

    # Pulsante per selezionare il gruppo "JOB"
    btn_JOB = tk.Button(button_frame, text="JOB", command=lambda: change_group("JOB", folder, label, btn_next, btn_prev))
    btn_JOB.pack(side=tk.LEFT, padx=10)

    # FORWARD BUTTON
    btn_next = tk.Button(button_frame, text="AVANTI", command=lambda: next_image(img_list, index, label, btn_next, btn_prev))
    btn_next.pack(side=tk.LEFT, padx=10)

    # BACK BUTTON
    btn_prev = tk.Button(button_frame, text="INDIETRO", command=lambda: prev_image(img_list, index, label, btn_next, btn_prev))
    btn_prev.pack(side=tk.LEFT, padx=10)

    # Avvia l'interfaccia grafica
    root.mainloop()

    if __name__ == "__main__":
    create_gui()

    Continue reading...

Compartilhe esta Página