Listbox recuperation de variable
RésoluXCode -
Bonjour tout le monde,
je suis actuellement sur un projet de petit script qui me permettra d'éditer un mail plus rapidement au boulot ce sont des mails type a quelques détails prêt. pour cela j'ai quelques Entry qui me permettent de modifier les paramètres dont j'ai besoin, le reste du texte est générer automatiquement via le script.
Tout fonctionne bien sauf au niveau d'une listbox pour choisir la civilité.
impossible de sortir le texte en question (Monsieur ou Madame)
je ne vois pas ou je me plante si quelqu'un sait m'aider.
merci beaucoup d'avance
voici le code en question
import tkinter as tk def generate_and_insert_message(): msg_structure = [ entry_name.get(), ",\n\n", "Veuillez trouver bla bla bla...", "\n", entry_desc_ot.get(), "\n", entry_num_ot.get(), "\n", entry_tax_amount.get(), "\n\n", "Cordialement."] selection = label_c.curselection() selected_item = label_c.get(selection) text_generated.delete(1.0, tk.END) text_generated.insert("1.0", "".join(value for value in msg_structure)) fenetre = tk.Tk() label_c = tk.Label(fenetre, text="Civilité : ") label_c.grid(column=0, row=1, sticky="nw", pady=2) label_c = tk.Listbox(fenetre, width=31, height=0) label_c.grid(column=1, row=1, columnspan=2) for item in ["Madame", "Monsieur"]: label_c.insert(tk.END, item) label_name = tk.Label(fenetre, text="Nom : ") label_name.grid(column=0, row=3, sticky="w", pady=2) entry_name = tk.Entry(fenetre, width=31) entry_name.grid(column=1, row=3, columnspan=2) label_desc_ot = tk.Label(fenetre,text="Description OT : ",) label_desc_ot.grid(column=0, row=4, sticky="w", pady=2) entry_desc_ot = tk.Entry(fenetre, width=31) entry_desc_ot.grid(column=1, row=4, columnspan=2) label_num_ot = tk.Label(fenetre, text="Numéro de l'OT : ") label_num_ot.grid(column=0, row=5, sticky="w", pady=2) entry_num_ot = tk.Entry(fenetre, width=31) entry_num_ot.grid(column=1, row=5, columnspan=2) label_tax_amount = tk.Label(fenetre, text="Montant de la taxe : ") label_tax_amount.grid(column=0, row=6, sticky="w", pady=2) entry_tax_amount = tk.Entry(fenetre, width=31) entry_tax_amount.grid(column=1, row=6, columnspan=2) label_generated_text = tk.Label(fenetre, text="Texte généré : ") label_generated_text.grid(column=0, row=12, sticky="w", pady=2) text_generated = tk.Text(fenetre, height=10, width=33) text_generated.grid(column=1) but_generate_text = tk.Button(fenetre, text="Générer", command=generate_and_insert_message, pady=2) but_generate_text.grid(column=1, row=11, sticky="sw", pady=20) entry_name.focus_set() fenetre.mainloop()
- Listbox recuperation de variable
- Récupération de déchets - Guide
- Convertisseur récupération de texte - Guide
- Recuperation video youtube - Guide
- Impossible de récupérer mon compte gmail - Guide
- Récupération message whatsapp - Guide
4 réponses
bonjour,
label_c.get(tk.ACTIVE)
Merci beaucoup c'etait bête effectivement... des fois faut pas voir plus loin que le bout de son nez je commencais a m'arracher les cheveux
Salut.
Le souci avec tk.ACTIVE est que même s'il n'y a pas eu de sélection de la part de l'utilisateur, est qu'il y en a une par défaut, la première.
Un simple exemple de comment j'aurais fait.
import tkinter as tk TITLES = ( 'Madame', 'Mademoiselle', 'Monsieur', ) def show(listbox, label): try: index = listbox.curselection()[0] except IndexError: # Aucun item sélectionné return values = listbox.getvar(listbox.cget('listvariable')) label['text'] = values[index] window = tk.Tk() title_var = tk.StringVar(value=TITLES) title_box = tk.Listbox( window, height=len(TITLES), bg='white', fg='blue', selectbackground='blue', selectforeground='white', selectmode=tk.SINGLE, listvariable=title_var, ) title_box.grid() # for k, v in title_box.config().items(): # print(k, v) def listbox_scroll(evt, listbox): try: index = title_box.curselection()[0] listbox.selection_clear(index) except IndexError: index = 0 else: if index < listbox.size() - 1 and (evt.keysym == 'Down' or evt.num == 5): index += 1 elif index > 0 and (evt.keysym == 'Up' or evt.num == 4): index -= 1 listbox.selection_set(index) result_label = tk.Label(window) result_label.grid() validate_button = tk.Button( window, text='Afficher', command=lambda: show(title_box, result_label), ) validate_button.grid() title_box.bind('<Up>', lambda evt: listbox_scroll(evt, title_box)) title_box.bind('<Down>', lambda evt: listbox_scroll(evt, title_box)) # Windows scroll title_box.bind("<MouseWheel>", lambda evt: listbox_scroll(evt, title_box)) # Unix scroll title_box.bind('<Button-4>', lambda evt: listbox_scroll(evt, title_box)) title_box.bind('<Button-5>', lambda evt: listbox_scroll(evt, title_box)) window.mainloop()
Je pense tout de même qu'un menu (Menubutton et Menu) serait bien mieux adapté pour faire cela, mais plus complexe à mettre en œuvre.
Ou une comboBox avec ttk.
import tkinter as tk from tkinter import ttk def afficheChoix(): print(comboBox.get()) root = tk.Tk() root.geometry('300x200') labelChoix = tk.Label(root, text = "Veuillez faire un choix !") labelChoix.pack() civilite=["Monsieur", "Madame", "Maitre", "Docteur", "Docteure"] comboBox = ttk.Combobox(root, values=civilite) comboBox.current(0) comboBox.pack() bouton = tk.Button(root, text="Choix", command=afficheChoix) bouton.pack() root.mainloop()