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()
4 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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()
-
-
Ouais....
Tu aurais pu prendre le temps et la peine de répondre à l'intervenant qui t'a aidé sur l'autre forum avant de poster ici.