FAQ Python
FAQ PythonConsultez toutes les FAQ
Nombre d'auteurs : 11, nombre de questions : 188, dernière mise à jour : 14 juin 2021
Tkinter ne propose pas le widget Combobox. On peut donc utiliser la bibliothèque Tix (qui est à priori installée avec Python) ou Pmw pour récupérer ce widget. Le Combobox se compose d'un widget Entry et d'un widget Menu qui contient les éléments sélectionnables. Les paramètres importants sont:
- editable: indique si la valeur du champ Entry est visible ou non
- dropdown: indique si le menu se présente sous forme d'une Listbox ou d'un bouton qui permet d'afficher cette Listbox
- variable: variable référençant la valeur sélectionnée dans la Listbox.
- command: fonction appelée lorsqu'une valeur est sélectionnée dans la Listbox
Si vous voulez avoir une Combobox dont on puisse uniquement sélectionnée une valeur dans une liste, il faut modifier la propriété de l'état de l'Entry à readonly
import
Tix
def
Affiche
(
evt):
print
varcombo.get
(
) ## On affiche a l'ecran la valeur selectionnee
root =
Tix.Tk
(
)
varcombo =
Tix.StringVar
(
)
combo =
Tix.ComboBox
(
root, editable=
1
, dropdown=
1
, variable=
varcombo, command =
Affiche)
combo.entry.config
(
state=
'readonly'
) ## met la zone de texte en lecture seule
combo.insert
(
0
, 'NT'
)
combo.insert
(
1
, 'Linux'
)
combo.pack
(
)
root.mainloop
(
)
Pour vider la liste de choix d'un ComboBox, il vous faut tout d'abord accéder à l'objet listbox du ComboBox. Cet objet est lui-même un sous-objet de l'objet slistbox de la classe Tix.ScrolledListBox. Ainsi grâce au dictionnaire c.subwidget_list, vous pouvez tout d'abord accéder à l'objet slistbox puis avec le dictionnaire c.subwidget_list['slistbox'].subwidget_list à l'objet listbox. Il vous suffit ensuite d'appliquer la méthode usuelle sur un objet de type ListBox pour vider celui-ci. Ainsi, l'instruction c.subwidget_list['slistbox'].subwidget_list['listbox'].delete(0, Tk.END) permet de vider la liste de choix du ComboBox c
import
Tix
import
Tkinter as
Tk
root =
Tix.Tk
(
)
combo =
Tix.ComboBox
(
root)
combo.insert
(
0
,'elem1'
)
combo.insert
(
0
,'elem2'
)
combo.insert
(
0
,'elem3'
)
combo.pack
(
)
def
clear
(
):
combo.subwidget_list['slistbox'
].subwidget_list['listbox'
].delete
(
0
, Tk.END)
btn =
Tix.Button
(
root, text=
'vider la liste'
, command=
clear)
btn.pack
(
)
root.mainloop
(
)