Import Customtkinter As CTK

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 5

import customtkinter as ctk

import tkinter as tk

import pandas as pd

from PIL import Image, ImageTk

import os

import webbrowser

import subprocess

# Lire les données depuis le fichier Excel

excel_path = 'E:/boss/VATOBE/pierres_precieuses.xlsx'

df = pd.read_excel(excel_path)

# Créer la fenêtre principale

root = ctk.CTk()

root.title("Bibliothèque des Pierres Précieuses")

root.geometry("1000x750")

# Créer un cadre pour afficher les informations

frame = ctk.CTkFrame(root, fg_color="#f5f5f5", corner_radius=15)

frame.grid(row=0, column=2, columnspan=3, padx=20, pady=20, sticky="nsew")

# Fonction pour afficher les informations d'une pierre

def afficher_pierre(pierre):

# Effacer les widgets existants dans le cadre

for widget in frame.winfo_children():

widget.destroy()

# Récupérer le nom, le chemin de la photo, le chemin du fichier txt et les coordonnées

nom = pierre['Nom']

photo_path = pierre['Photo']

txt_path = pierre['txt']
coordonnees = pierre['Coordonnées']

# Afficher le nom de la pierre

label_nom = ctk.CTkLabel(frame, text=nom, font=("Helvetica", 24, "bold"), text_color="#333333")

label_nom.grid(row=0, column=0, columnspan=2, pady=10)

# Afficher la photo de la pierre

if os.path.exists(photo_path):

img = Image.open(photo_path)

img = img.resize((250, 250), Image.LANCZOS)

photo = ImageTk.PhotoImage(img)

label_photo = ctk.CTkLabel(frame, image=photo)

label_photo.image = photo

label_photo.grid(row=1, column=0, pady=10, padx=10)

else:

label_photo = ctk.CTkLabel(frame, text="Photo non trouvée", font=("Arial", 14),


text_color="red")

label_photo.grid(row=1, column=0, pady=10, padx=10)

# Afficher le contenu du fichier .txt

if os.path.exists(txt_path):

try:

with open(txt_path, 'r', encoding='utf-8') as file:

text_content = file.read()

except UnicodeDecodeError:

with open(txt_path, 'r', encoding='latin-1') as file:

text_content = file.read()

text_box = tk.Text(frame, wrap='word', height=15, width=40, bg="#e8e8e8", fg="#333333",


font=("Helvetica", 14), padx=10, pady=10)

text_box.insert(tk.END, text_content)

text_box.grid(row=1, column=1, pady=10, padx=10)


text_box.configure(state='disabled') # Rendre le texte non modifiable

else:

label_txt = ctk.CTkLabel(frame, text="Fichier TXT non trouvé", font=("Arial", 14),


text_color="red")

label_txt.grid(row=1, column=1, pady=10, padx=10)

# Afficher les coordonnées avec un lien pour ouvrir dans Google Maps

def ouvrir_google_maps():

url = f"https://www.google.com/maps?q={coordonnees}"

webbrowser.open(url)

if pd.notna(coordonnees):

label_coordonnees = ctk.CTkLabel(frame, text="Coordonnées: " + coordonnees, font=("Arial",


14), text_color="#007acc", cursor="hand2")

label_coordonnees.grid(row=2, column=0, pady=10)

label_coordonnees.bind("<Button-1>", lambda e: ouvrir_google_maps())

else:

label_coordonnees = ctk.CTkLabel(frame, text="Coordonnées non disponibles", font=("Arial",


14), text_color="red")

label_coordonnees.grid(row=2, column=0, pady=10)

# Fonction pour rechercher et afficher une pierre

def rechercher_pierre():

nom_recherche = entry_recherche.get().strip().lower()

pierre = df[df['Nom'].str.lower() == nom_recherche]

if not pierre.empty:

afficher_pierre(pierre.iloc[0])

else:

for widget in frame.winfo_children():

widget.destroy()

label_erreur = ctk.CTkLabel(frame, text="Pierre non trouvée", font=("Arial", 14),


text_color="red")
label_erreur.grid(row=4, column=0, pady=10)

# Fonction pour ouvrir le fichier Excel

def ouvrir_excel():

subprocess.Popen(["start", excel_path], shell=True)

# Ajouter une Listbox pour sélectionner une pierre (Tkinter Listbox)

listbox = tk.Listbox(root, height=20, width=30, font=("Helvetica", 14), bg="#f0f0f0", fg="#333333")

listbox.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")

# Ajouter les noms des pierres dans la Listbox

for pierre in df['Nom']:

listbox.insert("end", pierre)

# Fonction pour afficher les informations lorsque l'utilisateur sélectionne un nom dans la Listbox

def on_listbox_select(event):

selected_index = listbox.curselection() # Récupérer l'indice sélectionné

if selected_index:

selected_value = listbox.get(selected_index) # Récupérer la valeur sélectionnée

pierre = df[df['Nom'] == selected_value]

if not pierre.empty:

afficher_pierre(pierre.iloc[0])

# Lier la sélection de la Listbox à la fonction on_listbox_select

listbox.bind("<<ListboxSelect>>", on_listbox_select)

# Ajouter un champ de saisie pour la recherche

entry_recherche = ctk.CTkEntry(root, fg_color="#ffffff", text_color="black", corner_radius=10,


font=("Helvetica", 14))

entry_recherche.grid(row=2, column=0, pady=10, padx=10)


# Ajouter un bouton pour déclencher la recherche

bouton_recherche = ctk.CTkButton(root, text="Rechercher", command=rechercher_pierre,


fg_color="#007acc", text_color="white", corner_radius=10, font=("Helvetica", 14))

bouton_recherche.grid(row=2, column=1, pady=10, padx=10)

# Ajouter un bouton pour ouvrir le fichier Excel

bouton_ajouter = ctk.CTkButton(root, text="Ajouter", command=ouvrir_excel, fg_color="#007acc",


text_color="white", corner_radius=10, font=("Helvetica", 14))

bouton_ajouter.grid(row=3, column=0, pady=10, padx=10)

# Démarrer l'interface graphique

root.mainloop()

You might also like