Je veux remplir mes entrées lorsque je clique sur un nom de ma Combobox sans boutons comme 'check' pour afficher les valeurs. Comment puis je faire ça?
import tkinter as tk
from tkinter import ttk
import csv
root = tk.Tk()
cb = ttk.Combobox(root,state='readonly')
labName = ttk.Label(root,text='Names: ')
labTel = ttk.Label(root,text='TelNum:')
labCity = ttk.Label(root,text='City: ')
entTel = ttk.Entry(root,state='readonly')
entCity = ttk.Entry(root,state='readonly')
with open('file.csv','r',newline='') as file:
reader = csv.reader(file,delimiter='\t')
cb.grid(row=0,column=1)
labName.grid(row=0,column=0)
labTel.grid(row=1,column=0)
entTel.grid(row=1,column=1)
labCity.grid(row=2,column=0)
entCity.grid(row=2,column=1)
Vous pouvez utiliser bind()
pour exécuter la fonction on_select
Lorsque vous sélectionnez un élément dans la liste.
cb.bind('<<ComboboxSelected>>', on_select)
et dans cette fonction, vous pouvez remplir Entry
.
Ancien exemple de GitHub: combobox-get-selection
#!/usr/bin/env python3
import tkinter as tk
import tkinter.ttk as ttk
# --- functions ---
def on_select(event=None):
print('----------------------------')
if event: # <-- this works only with bind because `command=` doesn't send event
print("event.widget:", event.widget.get())
for i, x in enumerate(all_comboboxes):
print("all_comboboxes[%d]: %s" % (i, x.get()))
# --- main ---
root = tk.Tk()
all_comboboxes = []
cb = ttk.Combobox(root, values=("1", "2", "3", "4", "5"))
cb.set("1")
cb.pack()
cb.bind('<<ComboboxSelected>>', on_select)
all_comboboxes.append(cb)
cb = ttk.Combobox(root, values=("A", "B", "C", "D", "E"))
cb.set("A")
cb.pack()
cb.bind('<<ComboboxSelected>>', on_select)
all_comboboxes.append(cb)
b = tk.Button(root, text="Show all selections", command=on_select)
b.pack()
root.mainloop()
MODIFIER:
La ligne if event:
Dans on_select
Ne fonctionne que lorsque vous utilisez bind()
car elle exécute la fonction avec des informations sur l'événement. command=
Exécute la fonction sans arguments, puis définit even=None
, Puis if event:
Est toujours False
.