Python tkinter naviguer avec le clavier dans os.listdir
FerméPhil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 5 août 2023 à 17:54
- Python tkinter naviguer avec le clavier dans os.listdir
- Comment taper / sur clavier - Guide
- Comment faire le + sur clavier telephone iphone - Guide
- Telecharger clavier arabe تنزيل لوحة المفاتيح العربية - Télécharger - Divers Web & Internet
- Clavier de l'ordinateur - Guide
- Changer clavier qwerty en azerty - Guide
8 réponses
Modifié le 24 juil. 2023 à 10:35
Bonjour,
Il manque des trucs là-dedans :
- Je ne vois pas les imports (tkinter, os, ...), la définition de root,
- L'instruction root.mainloop(), ...
- Ton code est surement incomplet.
- A quoi sert ce Toplevel ligne 5 ?
Bref, pas moyen de tester ton code
18 juil. 2023 à 17:22
Hello Phil ! Et merci de ta réponse.
Le code est effectivement incomplet je n’ai mis que la fonction concernée car le code au complet est assez costaud.
Si nécessaire, je vais poster le tout dès que je rentre.
Modifié le 19 juil. 2023 à 09:04
Bonjour,
Structure bien ton code:
les imports
les définitions de fonctions
le programme principal: définition des constantes, de la fenêtre, des widgets
boucle évènementielle
Un petit exemple qui ressemble un peu à ce que tu veux:
import os from tkinter import * def list_files(evt): ''' Affiche la liste des fichiers Pas besoin de définir de scroll bar dans le widget Text, il suffit de scroller avec la roulette de la souris ''' files = os.listdir(wd) for _file in files: t1.insert(END, _file+'\n') wd = os.getcwd() WIDTH, HEIGHT = 400, 400 main_win = Tk() main_win.title('Test : appuyer sur Entrée') main_win.geometry(str(WIDTH)+'x'+str(HEIGHT)+'+400+100') #Appui sur Entrée pour lister les fichiers main_win.bind("<Return>", list_files) t1 = Text(main_win, width = 45, height = 22) t1.place(x = 10, y = 10) main_win.mainloop()
24 juil. 2023 à 10:15
Bonjour Aya,
Alors, résultat des courses ? :-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question25 juil. 2023 à 05:23
Bonjour Phil !
Merci de suivre le sujet !
J'ai tenté ( surement maladroitement ) d'utiliser le code que tu m'as envoyé, mais la boite de dialogue m'affiche le chemin de la bibliothèque au lieu du contenu de celle ci. Capture d'ecran : https://ibb.co/xJQWp15
Je te propose le code complet, il y a probablement beaucoup de choses à revoir dans la mesure ou je me suis dépatouillé comme j'ai pu, mais dans l'ensemble il repond à mon besoin ( mise a part l'usage du clavier et l'integration d'une scroll bar ). Desolé pour la longueur :)
import tkinter as tk from PIL import Image, ImageTk import os frame = None # Déclarer la variable frame en tant que variable globale button_snes = None # Déclarer la variable button_snes en tant que variable globale button_n64 = None # Déclarer la variable button_snes en tant que variable globale button_nswitch = None # Déclarer la variable button_snes en tant que variable globale button_PS1 = None # Déclarer la variable button_snes en tant que variable globale button_PS2 = None # Déclarer la variable button_snes en tant que variable globale button_PS3 = None # Déclarer la variable button_snes en tant que variable globale button_Xbox = None # Déclarer la variable button_snes en tant que variable globale button_Multijoueur = None # Déclarer la variable button_snes en tant que variable globale image_references = [] # Liste pour stocker les références des images # Fonction pour afficher le sous-menu des jeux def Sous_menu_jeux(): global frame, button_snes, button_n64, button_nswitch, button_PS1, button_PS2, button_PS3, button_Xbox, button_Multijoueur # Utiliser les variables globales frame et button_snes #Fond #SNES fond_snes = Image.open('snes.jpg') fond_snes = fond_snes.resize((450, 150)) photo_snes = ImageTk.PhotoImage(fond_snes) image_references.append(photo_snes) # Ajouter la référence de l'image à la liste #N64 fond_n64 = Image.open('cc.jpg') fond_n64 = fond_n64.resize((450, 150)) photo_n64 = ImageTk.PhotoImage(fond_n64) image_references.append(photo_n64) # Ajouter la référence de l'image à la liste #nswitch fond_nswitch = Image.open('NSwitch.png') fond_nswitch = fond_nswitch.resize((450, 150)) photo_nswitch = ImageTk.PhotoImage(fond_nswitch) image_references.append(photo_nswitch) # Ajouter la référence de l'image à la liste #PS1 fond_ps1 = Image.open('play1.jpg') fond_ps1 = fond_ps1.resize((450, 150)) photo_ps1 = ImageTk.PhotoImage(fond_ps1) image_references.append(photo_ps1) # Ajouter la référence de l'image à la liste #PS2 fond_ps2 = Image.open('ps22.png') fond_ps2 = fond_ps2.resize((450, 150)) photo_ps2 = ImageTk.PhotoImage(fond_ps2) image_references.append(photo_ps2) # Ajouter la référence de l'image à la liste #PS3 fond_ps3 = Image.open('ps3-logo2.png') fond_ps3 = fond_ps3.resize((450, 150)) photo_ps3 = ImageTk.PhotoImage(fond_ps3) image_references.append(photo_ps3) # Ajouter la référence de l'image à la liste #Xbox fond_xbox = Image.open('xbox.png') fond_xbox = fond_xbox.resize((450, 150)) photo_xbox = ImageTk.PhotoImage(fond_xbox) image_references.append(photo_xbox) # Ajouter la référence de l'image à la liste #Multi fond_multi = Image.open('online.png') fond_multi = fond_multi.resize((450, 150)) photo_multi = ImageTk.PhotoImage(fond_multi) image_references.append(photo_multi) # Ajouter la référence de l'image à la liste #Home fond_home = Image.open('home.png') fond_home = fond_home.resize((450, 150)) photo_home = ImageTk.PhotoImage(fond_home) image_references.append(photo_home) # Ajouter la référence de l'image à la liste # Créer une fenêtre pour le sous-menu selection_window = tk.Toplevel(root) selection_window.title("Selectionnez une option") selection_window.attributes('-fullscreen', True) frame = tk.Frame(selection_window, bg='white') frame.pack(fill=tk.BOTH, expand=True) # Configurer les options de colonnes et lignes pour que les boutons s'étendent correctement frame.columnconfigure(0, weight=1) frame.columnconfigure(1, weight=1) frame.columnconfigure(2, weight=1) frame.rowconfigure(0, weight=1) frame.rowconfigure(1, weight=1) frame.rowconfigure(2, weight=1) # Bouton "Super Nintendo" button_snes = tk.Button(frame, image=photo_snes, text="Super Nintendo", compound='top', font=("Arial", 24), bg='black', fg='white', command=lambda:[list_files_snes(),selection_window.destroy()]) button_snes.grid(row=0, column=0, sticky="nsew") # Autres boutons pour les consoles de jeux button_n64 = tk.Button(frame, image=photo_n64, text="Nintendo 64",compound='top', font=("Arial", 24),bg='black',fg='white', command=lambda:[list_files_n64(),selection_window.destroy()]) button_n64.grid(row=0, column=1, sticky="nsew") button_nswitch = tk.Button(frame, image=photo_nswitch, text="Nintendo Switch",compound="top", font=("Arial", 24),bg='black',fg='white') button_nswitch.grid(row=0, column=2, sticky="nsew") button_PS1 = tk.Button(frame, image=photo_ps1, text="PlayStation 1", compound="top", font=("Arial", 24),bg='black',fg='white') button_PS1.grid(row=1, column=0, sticky="nsew") button_PS2 = tk.Button(frame, image=photo_ps2, text="PlayStation 2",compound="top", font=("Arial", 24),bg='black',fg='white') button_PS2.grid(row=1, column=1, sticky="nsew") button_PS3 = tk.Button(frame, image=photo_ps3, text="PlayStation 3", compound="top", font=("Arial", 24),bg='black',fg='white') button_PS3.grid(row=1, column=2, sticky="nsew") button_Xbox = tk.Button(frame, image=photo_xbox, text="X box", font=("Arial", 24), compound="top", bg='black',fg='white') button_Xbox.grid(row=2, column=0, sticky="nsew") button_Multijoueur = tk.Button(frame,image=photo_multi, text="Multi-joueur", font=("Arial", 24), compound="top", bg='black',fg='white') button_Multijoueur.grid(row=2, column=1, sticky="nsew") button_home = tk.Button(frame, image=photo_home, text="Accueil", font=("Arial", 24), compound="top", bg='green',fg='white',command=selection_window.destroy) button_home.grid(row=2, column=2, sticky="nsew") # Mettre à jour l'image sur les boutons de CONSOLE button_snes.configure(image=photo_snes) button_n64.configure(image=photo_n64) button_nswitch.configure(image=photo_nswitch) button_PS1.configure(image=photo_ps1) button_PS2.configure(image=photo_ps2) button_PS3.configure(image=photo_ps3) button_Xbox.configure(image=photo_xbox) # Affichage des jeux SNES def list_files_snes(): global frame, image_references # Utiliser la variable globale frame frame.destroy() # Supprimer le frame actuel pour afficher les labels des fichiers # Créer une nouvelle fenêtre pour afficher la liste des jeux N64 selection_window2 = tk.Toplevel(root) selection_window2.title("Selectionnez une option") selection_window2.attributes('-fullscreen', True) folder_path = "C:\\Users\\aya\\Desktop\\abox\\Game\\Snes" # Remplacez par le chemin de votre dossier files = os.listdir(folder_path) # Filtrer les fichiers pour ne garder que ceux avec l'extension ".sfc" snes_files = [file for file in files if file.endswith(".sfc")] image_references = [] # Réinitialiser la liste des références d'images covers_folder_path = "C:\\Users\\aya\\source\\repos\\manuel\\snes_cover" # Spécifiez le chemin complet vers le dossier "covers" sur votre bureau for file in snes_files: cover_path = os.path.join(covers_folder_path, file.replace(".sfc", ".jpg")) try: cover_image = Image.open(cover_path) cover_image = cover_image.resize((650, 300)) # Redimensionner l'image pour l'affichage photo_cover = ImageTk.PhotoImage(cover_image) image_references.append(photo_cover) # Ajouter la référence de l'image à la liste except Exception as e: # Si une erreur se produit lors du chargement de l'image, vous pouvez choisir une image de remplacement par défaut. # Vous pouvez également gérer l'erreur d'une autre manière, par exemple, en affichant un message d'erreur. print(f"Erreur lors du chargement de l'image pour {file}: {e}") default_image = Image.open("C:\\Users\\aya\\Desktop\\ps2.jpg") # Remplacez "default_cover.jpg" par le chemin de votre image de remplacement par défaut default_image = default_image.resize((150, 150)) # Redimensionner l'image pour l'affichage photo_cover = ImageTk.PhotoImage(default_image) image_references.append(photo_cover) # Ajouter la référence de l'image à la liste frame = tk.Frame(selection_window2, bg='black') frame.pack(fill=tk.BOTH, expand=True) # Configurer les options de colonnes et lignes pour que les boutons s'étendent correctement frame.columnconfigure(0, weight=1) frame.columnconfigure(1, weight=1) frame.columnconfigure(2, weight=1) frame.rowconfigure(0, weight=1) frame.rowconfigure(1, weight=1) frame.rowconfigure(2, weight=1) # Afficher les noms des fichiers (jeux) et les couvertures dans des étiquettes (labels) for i, file in enumerate(snes_files): label = tk.Label(frame, text=file, image=image_references[i], compound="top") label.grid(row=i // 3, column=i % 3, padx=10, pady=5, sticky="nsew") def open_file(file_path): os.startfile(file_path) # Remplir la cellule avec l'image en ajustant la taille de l'image pour remplir la cellule label.grid_propagate(False) # Empêcher le réglage automatique de la taille du label label.grid_rowconfigure(0, weight=1) label.grid_columnconfigure(0, weight=1) # Redimensionner l'image pour remplir la cellule label.configure(image=image_references[i]) # Associer un clic sur l'image à la fonction d'ouverture du fichier label.bind("<Button-1>", lambda event, file_path=os.path.join(folder_path, file): open_file(file_path)) # Affichage des jeux N64 def list_files_n64(): global frame, image_references # Utiliser la variable globale frame frame.destroy() # Supprimer le frame actuel pour afficher les labels des fichiers # Créer une nouvelle fenêtre pour afficher la liste des jeux N64 selection_window2 = tk.Toplevel(root) selection_window2.title("Selectionnez une option") selection_window2.attributes('-fullscreen', True) folder_path = "C:\\Users\\aya\\Desktop\\abox\\Game\\N64" # Remplacez par le chemin de votre dossier files = os.listdir(folder_path) # Filtrer les fichiers pour ne garder que ceux avec l'extension ".n64" n64_files = [file for file in files if file.endswith(".n64")] image_references = [] # Réinitialiser la liste des références d'images covers_folder_path = "C:\\Users\\aya\\source\\repos\\manuel\\N64_cover" # Spécifiez le chemin complet vers le dossier "covers" sur votre bureau for file in n64_files: cover_path = os.path.join(covers_folder_path, file.replace(".n64", ".jpg")) try: cover_image = Image.open(cover_path) cover_image = cover_image.resize((650, 300)) # Redimensionner l'image pour l'affichage photo_cover = ImageTk.PhotoImage(cover_image) image_references.append(photo_cover) # Ajouter la référence de l'image à la liste except Exception as e: # Si une erreur se produit lors du chargement de l'image, vous pouvez choisir une image de remplacement par défaut. # Vous pouvez également gérer l'erreur d'une autre manière, par exemple, en affichant un message d'erreur. print(f"Erreur lors du chargement de l'image pour {file}: {e}") default_image = Image.open("C:\\Users\\aya\\Desktop\\ps2.jpg") # Remplacez "default_cover.jpg" par le chemin de votre image de remplacement par défaut default_image = default_image.resize((150, 150)) # Redimensionner l'image pour l'affichage photo_cover = ImageTk.PhotoImage(default_image) image_references.append(photo_cover) # Ajouter la référence de l'image à la liste frame = tk.Frame(selection_window2, bg='black') frame.pack(fill=tk.BOTH, expand=True) # Configurer les options de colonnes et lignes pour que les boutons s'étendent correctement frame.columnconfigure(0, weight=1) frame.columnconfigure(1, weight=1) frame.columnconfigure(2, weight=1) frame.rowconfigure(0, weight=1) frame.rowconfigure(1, weight=1) frame.rowconfigure(2, weight=1) # Afficher les noms des fichiers (jeux) et les couvertures dans des étiquettes (labels) for i, file in enumerate(n64_files): label = tk.Label(frame, text=file, image=image_references[i], compound="top") label.grid(row=i // 3, column=i % 3, padx=10, pady=5, sticky="nsew") def open_file(file_path): os.startfile(file_path) # Remplir la cellule avec l'image en ajustant la taille de l'image pour remplir la cellule label.grid_propagate(False) # Empêcher le réglage automatique de la taille du label label.grid_rowconfigure(0, weight=1) label.grid_columnconfigure(0, weight=1) # Redimensionner l'image pour remplir la cellule label.configure(image=image_references[i]) # Associer un clic sur l'image à la fonction d'ouverture du fichier label.bind("<Button-1>", lambda event, file_path=os.path.join(folder_path, file): open_file(file_path)) # Création de l'interface d'accueil root = tk.Tk() root.title("Console multi plate-forme") root.attributes('-fullscreen', True) root.config(background='#58D68D') # Récupération de la résolution width = root.winfo_screenwidth() height = root.winfo_screenheight() root.geometry(f'{width}x{height}') # Import et personnalisation de l'espace TV image = Image.open("TV-c.png") image = image.resize((width // 2, height)) # Redimensionner l'image pour l'adapter à la moitié de la largeur de l'écran image = ImageTk.PhotoImage(image) canvas = tk.Canvas(root, width=width / 2, height=height) canvas.create_image(width / 4, height / 2, image=image) # Centrer l'image horizontalement et verticalement canvas.pack(side=tk.LEFT) # Import et personnalisation de l'espace "Play" image2 = Image.open("videogames.jpg") image2 = image2.resize((width // 2, height)) # Redimensionner l'image pour l'adapter à la moitié de la largeur de l'écran image2 = ImageTk.PhotoImage(image2) canvas2 = tk.Canvas(root, width=width / 2, height=height) canvas2.create_image(width / 4, height / 2, image=image2) # Centrer l'image horizontalement et verticalement canvas2.pack(side=tk.RIGHT) # Bouton de l'accueil #TV survol def on_enter_btn1(event): image = Image.open("TV.jpg") image = image.resize((button1.winfo_width(), button1.winfo_height())) photo = ImageTk.PhotoImage(image) image_references.append(photo) # Ajouter la référence de l'image à la liste button1.configure(image=photo, bg='blue') button1.image = photo def on_leave_btn1(event): button1.configure(image='', bg='SystemButtonFace') # Créer le bouton "TV/VOD" button1 = tk.Button(canvas, text="TV/VOD", font=("Helvetica", 20)) button1.bind("<Enter>", on_enter_btn1) button1.bind("<Leave>", on_leave_btn1) button1.configure(bg='SystemButtonFace') button1.place(relx=0.5, rely=0.5, anchor=tk.CENTER) # Centrer le bouton horizontalement et verticalement dans le canevas # Jeux survol def on_enter_btn2(event): image = Image.open("videogames.jpg") image = image.resize((button2.winfo_width(), button2.winfo_height())) photo = ImageTk.PhotoImage(image) image_references.append(photo) # Ajouter la référence de l'image à la liste button2.configure(image=photo, bg='blue') button2.image = photo def on_leave_btn2(event): button2.configure(image='', bg='SystemButtonFace') # Créer le bouton "Play" button2 = tk.Button(canvas2, text="Play", font=("Helvetica", 20), command=Sous_menu_jeux) button2.bind("<Enter>", on_enter_btn2) button2.bind("<Leave>", on_leave_btn2) button2.configure(bg='SystemButtonFace') button2.place(relx=0.5, rely=0.5, anchor=tk.CENTER) # Centrer le bouton horizontalement et verticalement dans le canevas # Creer bouton éteindre button3 = tk.Button(root, text="Eteindre", font=("Arial", 24), command=root.destroy) button3.place(relx=0.5, rely=0.5, anchor=tk.CENTER) # Centrer le bouton horizontalement et verticalement dans le canevas # Afficher la fenêtre root.mainloop()
Modifié le 25 juil. 2023 à 11:50
Bonjour,
Si tu as vraiment copié/collé mon code sans rien y changer, tu appuies
sur Entrée et tu vois la liste des fichiers de ton répertoire courant
C'est juste un exemple
Chez moi ça donne ceci:
Ca, c'est bizarre, tu veux faire quoi exactement ? :
button1.bind("<Enter>", on_enter_btn1)
Ton code remis en ordre
Pas facile à tester, on n'a pas tes images ni les mêmes chemins que toi :
import tkinter as tk from PIL import Image, ImageTk import os def Sous_menu_jeux(): ''' Fonction pour afficher le sous-menu des jeux ''' global frame, button_snes, button_n64, button_nswitch, button_PS1, button_PS2, button_PS3, button_Xbox, button_Multijoueur # Utiliser les variables globales frame et button_snes #Fond SNES fond_snes = Image.open('snes.jpg') fond_snes = fond_snes.resize((450, 150)) photo_snes = ImageTk.PhotoImage(fond_snes) image_references.append(photo_snes) # Ajouter la référence de l'image à la liste #Fond N64 fond_n64 = Image.open('cc.jpg') fond_n64 = fond_n64.resize((450, 150)) photo_n64 = ImageTk.PhotoImage(fond_n64) image_references.append(photo_n64) # Ajouter la référence de l'image à la liste #nswitch fond_nswitch = Image.open('NSwitch.png') fond_nswitch = fond_nswitch.resize((450, 150)) photo_nswitch = ImageTk.PhotoImage(fond_nswitch) image_references.append(photo_nswitch) # Ajouter la référence de l'image à la liste #PS1 fond_ps1 = Image.open('play1.jpg') fond_ps1 = fond_ps1.resize((450, 150)) photo_ps1 = ImageTk.PhotoImage(fond_ps1) image_references.append(photo_ps1) # Ajouter la référence de l'image à la liste #PS2 fond_ps2 = Image.open('ps22.png') fond_ps2 = fond_ps2.resize((450, 150)) photo_ps2 = ImageTk.PhotoImage(fond_ps2) image_references.append(photo_ps2) # Ajouter la référence de l'image à la liste #PS3 fond_ps3 = Image.open('ps3-logo2.png') fond_ps3 = fond_ps3.resize((450, 150)) photo_ps3 = ImageTk.PhotoImage(fond_ps3) image_references.append(photo_ps3) # Ajouter la référence de l'image à la liste #Xbox fond_xbox = Image.open('xbox.png') fond_xbox = fond_xbox.resize((450, 150)) photo_xbox = ImageTk.PhotoImage(fond_xbox) image_references.append(photo_xbox) # Ajouter la référence de l'image à la liste #Multi fond_multi = Image.open('online.png') fond_multi = fond_multi.resize((450, 150)) photo_multi = ImageTk.PhotoImage(fond_multi) image_references.append(photo_multi) # Ajouter la référence de l'image à la liste #Home fond_home = Image.open('home.png') fond_home = fond_home.resize((450, 150)) photo_home = ImageTk.PhotoImage(fond_home) image_references.append(photo_home) # Ajouter la référence de l'image à la liste # Créer une fenêtre pour le sous-menu selection_window = tk.Toplevel(root) selection_window.title("Selectionnez une option") selection_window.attributes('-fullscreen', True) frame = tk.Frame(selection_window, bg='white') frame.pack(fill=tk.BOTH, expand=True) # Configurer les options de colonnes et lignes pour que les boutons s'étendent correctement frame.columnconfigure(0, weight=1) frame.columnconfigure(1, weight=1) frame.columnconfigure(2, weight=1) frame.rowconfigure(0, weight=1) frame.rowconfigure(1, weight=1) frame.rowconfigure(2, weight=1) # Bouton "Super Nintendo" button_snes = tk.Button(frame, image=photo_snes, text="Super Nintendo", compound='top', font=("Arial", 24), bg='black', fg='white', command=lambda:[list_files_snes(),selection_window.destroy()]) button_snes.grid(row=0, column=0, sticky="nsew") # Autres boutons pour les consoles de jeux button_n64 = tk.Button(frame, image=photo_n64, text="Nintendo 64",compound='top', font=("Arial", 24),bg='black',fg='white', command=lambda:[list_files_n64(),selection_window.destroy()]) button_n64.grid(row=0, column=1, sticky="nsew") button_nswitch = tk.Button(frame, image=photo_nswitch, text="Nintendo Switch",compound="top", font=("Arial", 24),bg='black',fg='white') button_nswitch.grid(row=0, column=2, sticky="nsew") button_PS1 = tk.Button(frame, image=photo_ps1, text="PlayStation 1", compound="top", font=("Arial", 24),bg='black',fg='white') button_PS1.grid(row=1, column=0, sticky="nsew") button_PS2 = tk.Button(frame, image=photo_ps2, text="PlayStation 2",compound="top", font=("Arial", 24),bg='black',fg='white') button_PS2.grid(row=1, column=1, sticky="nsew") button_PS3 = tk.Button(frame, image=photo_ps3, text="PlayStation 3", compound="top", font=("Arial", 24),bg='black',fg='white') button_PS3.grid(row=1, column=2, sticky="nsew") button_Xbox = tk.Button(frame, image=photo_xbox, text="X box", font=("Arial", 24), compound="top", bg='black',fg='white') button_Xbox.grid(row=2, column=0, sticky="nsew") button_Multijoueur = tk.Button(frame,image=photo_multi, text="Multi-joueur", font=("Arial", 24), compound="top", bg='black',fg='white') button_Multijoueur.grid(row=2, column=1, sticky="nsew") button_home = tk.Button(frame, image=photo_home, text="Accueil", font=("Arial", 24), compound="top", bg='green',fg='white',command=selection_window.destroy) button_home.grid(row=2, column=2, sticky="nsew") # Mettre à jour l'image sur les boutons de CONSOLE button_snes.configure(image=photo_snes) button_n64.configure(image=photo_n64) button_nswitch.configure(image=photo_nswitch) button_PS1.configure(image=photo_ps1) button_PS2.configure(image=photo_ps2) button_PS3.configure(image=photo_ps3) button_Xbox.configure(image=photo_xbox) def list_files_snes(): ''' Affichage des jeux SNES ''' global frame, image_references # Utiliser la variable globale frame frame.destroy() # Supprimer le frame actuel pour afficher les labels des fichiers # Créer une nouvelle fenêtre pour afficher la liste des jeux N64 selection_window2 = tk.Toplevel(root) selection_window2.title("Selectionnez une option") selection_window2.attributes('-fullscreen', True) folder_path = "C:\\Users\\aya\\Desktop\\abox\\Game\\Snes" # Remplacez par le chemin de votre dossier files = os.listdir(folder_path) # Filtrer les fichiers pour ne garder que ceux avec l'extension ".sfc" snes_files = [file for file in files if file.endswith(".sfc")] image_references = [] # Réinitialiser la liste des références d'images covers_folder_path = "C:\\Users\\aya\\source\\repos\\manuel\\snes_cover" # Spécifiez le chemin complet vers le dossier "covers" sur votre bureau for file in snes_files: cover_path = os.path.join(covers_folder_path, file.replace(".sfc", ".jpg")) try: cover_image = Image.open(cover_path) cover_image = cover_image.resize((650, 300)) # Redimensionner l'image pour l'affichage photo_cover = ImageTk.PhotoImage(cover_image) image_references.append(photo_cover) # Ajouter la référence de l'image à la liste except Exception as e: # Si une erreur se produit lors du chargement de l'image, vous pouvez choisir une image de remplacement par défaut. # Vous pouvez également gérer l'erreur d'une autre manière, par exemple, en affichant un message d'erreur. print(f"Erreur lors du chargement de l'image pour {file}: {e}") default_image = Image.open("C:\\Users\\aya\\Desktop\\ps2.jpg") # Remplacez "default_cover.jpg" par le chemin de votre image de remplacement par défaut default_image = default_image.resize((150, 150)) # Redimensionner l'image pour l'affichage photo_cover = ImageTk.PhotoImage(default_image) image_references.append(photo_cover) # Ajouter la référence de l'image à la liste frame = tk.Frame(selection_window2, bg='black') frame.pack(fill=tk.BOTH, expand=True) # Configurer les options de colonnes et lignes pour que les boutons s'étendent correctement frame.columnconfigure(0, weight=1) frame.columnconfigure(1, weight=1) frame.columnconfigure(2, weight=1) frame.rowconfigure(0, weight=1) frame.rowconfigure(1, weight=1) frame.rowconfigure(2, weight=1) # Afficher les noms des fichiers (jeux) et les couvertures dans des étiquettes (labels) for i, file in enumerate(snes_files): label = tk.Label(frame, text=file, image=image_references[i], compound="top") label.grid(row=i // 3, column=i % 3, padx=10, pady=5, sticky="nsew") def open_file(file_path): os.startfile(file_path) # Remplir la cellule avec l'image en ajustant la taille de l'image pour remplir la cellule label.grid_propagate(False) # Empêcher le réglage automatique de la taille du label label.grid_rowconfigure(0, weight=1) label.grid_columnconfigure(0, weight=1) # Redimensionner l'image pour remplir la cellule label.configure(image=image_references[i]) # Associer un clic sur l'image à la fonction d'ouverture du fichier label.bind("<Button-1>", lambda event, file_path=os.path.join(folder_path, file): open_file(file_path)) def list_files_n64(): ''' Affichage des jeux N64 ''' global frame, image_references # Utiliser la variable globale frame frame.destroy() # Supprimer le frame actuel pour afficher les labels des fichiers # Créer une nouvelle fenêtre pour afficher la liste des jeux N64 selection_window2 = tk.Toplevel(root) selection_window2.title("Selectionnez une option") selection_window2.attributes('-fullscreen', True) folder_path = "C:\\Users\\aya\\Desktop\\abox\\Game\\N64" # Remplacez par le chemin de votre dossier files = os.listdir(folder_path) # Filtrer les fichiers pour ne garder que ceux avec l'extension ".n64" n64_files = [file for file in files if file.endswith(".n64")] image_references = [] # Réinitialiser la liste des références d'images covers_folder_path = "C:\\Users\\aya\\source\\repos\\manuel\\N64_cover" # Spécifiez le chemin complet vers le dossier "covers" sur votre bureau for file in n64_files: cover_path = os.path.join(covers_folder_path, file.replace(".n64", ".jpg")) try: cover_image = Image.open(cover_path) cover_image = cover_image.resize((650, 300)) # Redimensionner l'image pour l'affichage photo_cover = ImageTk.PhotoImage(cover_image) image_references.append(photo_cover) # Ajouter la référence de l'image à la liste except Exception as e: # Si une erreur se produit lors du chargement de l'image, vous pouvez choisir une image de remplacement par défaut. # Vous pouvez également gérer l'erreur d'une autre manière, par exemple, en affichant un message d'erreur. print(f"Erreur lors du chargement de l'image pour {file}: {e}") default_image = Image.open("C:\\Users\\aya\\Desktop\\ps2.jpg") # Remplacez "default_cover.jpg" par le chemin de votre image de remplacement par défaut default_image = default_image.resize((150, 150)) # Redimensionner l'image pour l'affichage photo_cover = ImageTk.PhotoImage(default_image) image_references.append(photo_cover) # Ajouter la référence de l'image à la liste frame = tk.Frame(selection_window2, bg='black') frame.pack(fill=tk.BOTH, expand=True) # Configurer les options de colonnes et lignes pour que les boutons s'étendent correctement frame.columnconfigure(0, weight=1) frame.columnconfigure(1, weight=1) frame.columnconfigure(2, weight=1) frame.rowconfigure(0, weight=1) frame.rowconfigure(1, weight=1) frame.rowconfigure(2, weight=1) # Afficher les noms des fichiers (jeux) et les couvertures dans des étiquettes (labels) for i, file in enumerate(n64_files): label = tk.Label(frame, text=file, image=image_references[i], compound="top") label.grid(row=i // 3, column=i % 3, padx=10, pady=5, sticky="nsew") def open_file(file_path): os.startfile(file_path) # Remplir la cellule avec l'image en ajustant la taille de l'image pour remplir la cellule label.grid_propagate(False) # Empêcher le réglage automatique de la taille du label label.grid_rowconfigure(0, weight=1) label.grid_columnconfigure(0, weight=1) # Redimensionner l'image pour remplir la cellule label.configure(image=image_references[i]) # Associer un clic sur l'image à la fonction d'ouverture du fichier label.bind("<Button-1>", lambda event, file_path=os.path.join(folder_path, file): open_file(file_path)) def on_enter_btn2(event): image = Image.open("videogames.jpg") image = image.resize((button2.winfo_width(), button2.winfo_height())) photo = ImageTk.PhotoImage(image) image_references.append(photo) # Ajouter la référence de l'image à la liste button2.configure(image=photo, bg='blue') button2.image = photo def on_leave_btn2(event): button2.configure(image='', bg='SystemButtonFace') frame = None # Déclarer la variable frame en tant que variable globale button_snes = None # Déclarer la variable button_snes en tant que variable globale button_n64 = None # Déclarer la variable button_snes en tant que variable globale button_nswitch = None # Déclarer la variable button_snes en tant que variable globale button_PS1 = None # Déclarer la variable button_snes en tant que variable globale button_PS2 = None # Déclarer la variable button_snes en tant que variable globale button_PS3 = None # Déclarer la variable button_snes en tant que variable globale button_Xbox = None # Déclarer la variable button_snes en tant que variable globale button_Multijoueur = None # Déclarer la variable button_snes en tant que variable globale image_references = [] # Liste pour stocker les références des images root = tk.Tk() root.title("Console multi plate-forme") root.attributes('-fullscreen', True) root.config(background='#58D68D') width = root.winfo_screenwidth() height = root.winfo_screenheight() root.geometry(f'{width}x{height}') canvas = tk.Canvas(root, width=width / 2, height=height) canvas.create_image(width / 4, height / 2, image=image) # Centrer l'image horizontalement et verticalement canvas.pack(side=tk.LEFT) canvas2 = tk.Canvas(root, width=width / 2, height=height) canvas2.create_image(width / 4, height / 2, image=image2) # Centrer l'image horizontalement et verticalement canvas2.pack(side=tk.RIGHT) button1 = tk.Button(canvas, text="TV/VOD", font=("Helvetica", 20)) button1.bind("<Enter>", on_enter_btn1) button1.bind("<Leave>", on_leave_btn1) button1.configure(bg='SystemButtonFace') button1.place(relx=0.5, rely=0.5, anchor=tk.CENTER) # Centrer le bouton horizontalement et verticalement dans le canevas button2 = tk.Button(canvas2, text="Play", font=("Helvetica", 20), command=Sous_menu_jeux) button2.bind("<Enter>", on_enter_btn2) button2.bind("<Leave>", on_leave_btn2) button2.configure(bg='SystemButtonFace') button2.place(relx=0.5, rely=0.5, anchor=tk.CENTER) # Centrer le bouton horizontalement et verticalement dans le canevas button3 = tk.Button(root, text="Eteindre", font=("Arial", 24), command=root.destroy) button3.place(relx=0.5, rely=0.5, anchor=tk.CENTER) # Centrer le bouton horizontalement et verticalement dans le canevas # Import et personnalisation de l'espace TV image = Image.open("TV-c.png") image = image.resize((width // 2, height)) # Redimensionner l'image pour l'adapter à la moitié de la largeur de l'écran image = ImageTk.PhotoImage(image) image2 = Image.open("videogames.jpg") image2 = image2.resize((width // 2, height)) # Redimensionner l'image pour l'adapter à la moitié de la largeur de l'écran image2 = ImageTk.PhotoImage(image2) root.mainloop()
Peut tu préciser ce que tu entends par là:
"à part que je ne parviens absolument pas a utiliser le clavier dans
le cadre de la navigation et l'exécution des fichiers. "
Modifié le 26 juil. 2023 à 09:59
L'idéal serait que tu nous explique exactement et en détails ce que
ton code est censé faire
Pour moi, tu veux afficher les exécutables d'un répertoire, et en exécuter
en cliquant sur le nom dans la liste, c'est ça ?
Si c'est ça, ça doit se faire plus simplement ...
Est-ce que ça pourrait être ça ? :
import os from tkinter import * from tkinter import filedialog def run_exe(): filename= filedialog.askopenfilename(initialdir="C:/Phil/Dev/Python/tests", title="Selectionner un exe", filetypes=(("executables","*.exe"), ("all files", "*.*"))) os.system(filename) WIDTH, HEIGHT = 400, 400 main_win = Tk() main_win.title('Test : appuyer sur Entrée') main_win.geometry(str(WIDTH)+'x'+str(HEIGHT)+'+400+100') Button(main_win, text="Lancer un executable", command=run_exe).place(x=100, y=100) main_win.mainloop()
5 août 2023 à 17:54
Bah, un jour on aura bien une réponse ....