#!/usr/bin/env python # -*- coding:UTF-8 -*- #------------------------------------------------------------------------------- # Name: module1 # Purpose: # # Author: MACHADO.F # # Created: 13/04/2012 # Copyright: (c) MACHADO.F 2012 # Licence: #------------------------------------------------------------------------------- """ Options standard activestyle :Spécifie l'apparence de la ligne active de la liste. background / bg :Couleur de fond. disabledbackground :Couleur de fond quand le widget est à l'état DISABLED. disabledforeground :Couleur de premier plan affichée quand l'état du widget est DISABLED. exportselection :Par défaut, l'utilisateur sélectionner le texte avec la souris et le texte choisi sera exporté au presse-papiers. Pour mettre hors service ce comportement, utilisez exportselection=0. command :Lance une commande lors du changement de la valeur du champ de saisie. borderwidth / bd :Largeur de la frontière autour de la combobox. cursor :Curseur utilisé quand la souris est sur le widget. foreground / fg :Couleur du texte. highlightbackground :Couleur highlight quand le widget n'a pas de focus. highlightcolor :Couleur highlight quand le widget a un focus. highlightthickness :Intensité de la couleur de focus. height :Nombre de lignes affichés dans la liste. insertbackground :Couleur du curseur d'insertion. insertborderwidth : insertofftime :Clignotement du curseur, temps où il est éteint. insertontime :Clignotement du curseur, temps où il est allumé. insertwidth :Largeur du curseur. 2 pixels par défaut. items :Liste de éléments. justify :Emplacement du texte. listvariable :StringVar connecté à la liste complète. matchrequired :La valeur de saisie doit être dans la liste. Si elle n'y figure pas, le premier élément de la liste est sélectionné nodouble :Enlève les doubles de la liste. 0:Ne fait rien (par défaut) 1:Supprime les doubles readonlybackground :Couleur de fond l'état du widget est "readonly". relief :Effets tridimensionnels autour de l'entrée de texte. selectbackground :Couleur de fond à l'affichage du texte sélectionné. selectborderwidth :Largeur de la frontière utilisé autour du texte sélectionné. Par défaut un pixel. selectforeground :Couleur de premier plan du texte sélectionné. sort :Tri la liste suivant la valeur renseignée. None :Pas de tri (par défaut) sort :Tri croissant par ordre alphanumérique reversed :Tri décroissant par ordre alphanumérique reverse :inversion de la liste state :Etat du widget (NORMAL, DISABLED). takefocus :Normalement, le focus contrôle le widget; fournissez la valeur 0 à cette option pour obtenir l'interruption du contrôle de focus. textvariable :StringVar associé à la zone de saisie. width :Largeur de l'étiquette en caractères (pas pixels!). La largeur est basée sur la moyenne des caractères, donc quelques chaînes dans des polices de caractères. proportionnelles ne peuvent pas aller à cette longueur. xscrollcommand :A lier avec une scrollbar pour faire défiler le texte de la boite de saisie si ce texte est trop long. Methode append_ :Ajout d'un élément à la fin d'une liste.* change_list :Remplace la liste par une nouvelle.* clear_list :Vide la liste extend_ :Concatène la liste d'origine avec la liste .* get :Récupère la valeur du champ de saisie. index_to_item :Renvoi l'élément de la liste se trouvant à la ligne(index) insert_ :Ajout d'un élément dans la liste à la ligne index.* item_to_index :Renvoi l' (ligne), de la liste, correspondant à remove_ :Supprime un élément de la liste set :Modifie le champ de saisie avec la valeur renseignée. size :Renvoi le nombre d'élément de la liste * Les méthodes de suppression de double et de tri sont aussi appelé. Vérifier les options nodouble et sort. """ from tkinter import * from time import * #import tkinter.messagebox as tkMessageBox class Combobox(Frame): """Champ de saisie associé à une liste déroulante""" def __init__(self, master=None, command = '', height=10, items=[], matchrequired=0, nodouble = 0, sort=None, width=20, **Arg ): """Construit un Widget Combobox avec master comme parent Option Standard activestyle, background / bg, disabledbackground, disabledforeground, exportselection, borderwidth / bd, command, cursor, foreground / fg, highlightbackground, highlightcolor, highlightthickness, height, insertbackground, insertborderwidth, insertofftime, insertontime, insertwidth, items, justify, listvariable, matchrequired, nodouble, readonlybackground, relief, selectbackground, selectborderwidth, selectforeground, sort, state, takefocus, textvariable, width, xscrollcommand Methode append_, change_list, clear_list, extend_, get, index_to_item, insert_, item_to_index, remove_, set, size """ self.Arg=Arg # Dictionnaire des options de configuration de la Combobox self.command=command self.height = height self.index = -1 self.items = items self.master = master self.matchrequired = matchrequired self.nodouble = nodouble self.sort = sort self.sVar = StringVar() self.width = width self.widget_option = {} self.widget_option['button'] = ('bg', 'background', 'cursor', 'fg', 'foreground', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'relief', ) self.widget_option['entry'] = ('bg', 'background', 'cursor', 'disabledbackground', 'disabledforeground', 'exportselection','fg', 'foreground', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'insertbackground', 'insertborderwidth', 'insertofftime', 'insertontime', 'insertwidth', 'justify', 'readonlybackground', 'relief', 'selectbackground', 'selectborderwidth', 'selectforeground', 'state', 'takefocus', 'textvariable', 'width', 'xscrollcommand', ) self.widget_option['frame'] = ('bd', 'borderwidth', 'cursor', 'height', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'padx', 'pady', 'relief', 'takefocus', 'width', ) self.widget_option['listbox'] = ('activestyle', 'bg', 'background', 'cursor', 'exportselection', 'fg', 'foreground', 'height', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'listvariable', 'relief', 'selectbackground', 'selectborderwidth', 'selectforeground', 'width', ) self.widget_option['scrollbar'] = ('bg', 'background', 'cursor', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'relief', ) self.widget_option['toplevel'] = ('bg', 'background', 'cursor', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'relief', ) # --------------------------------------------------------------- Frame.__init__(self, master, self.__widget_arg__('frame', self.Arg)) if type(self.items) != list: if type(self.items) == tuple: self.items = list(self.items) else: self.items=['Liste incorrecte'] self.bind('', self.__match_required__) self.__nodouble_in_list__() self.__sort_list__() self.__initialize__() def test(self, event): print(event.widget) # Initialise la partie graphique def __initialize__(self): """Fonction interne""" # Actualise en fonction de def __actu_entry__(): """Fonction interne""" if len(self.items)!= 0: indexmax=len(self.items) - 1 if self.index >= indexmax: self.index = indexmax if self.index <= 0: self.index= 0 self.set(self.index_to_item(self.index)) self.__command__() else: self.index = -1 # Autocomplétion lors de la saisie de texte def __auto_completion__(event): """Fonction interne""" if event.keysym not in ['BackSpace', 'Delete', 'Down', 'Up']: index = -1 for item in self.items: index += 1 if self.sVar.get() in item[:(len(self.sVar.get()))]: self.sVar.set(item) self.entry.select_range(INSERT,END) self.index = index self.__command__() break else: self.__command__() # Action de la touche bas du clavier. # fait défiler les items de la liste vers le bas def __keypress_down__(event=None): """Fonction interne""" self.index = self.index + 1 __actu_entry__() # Action de la touche haut du clavier. # fait défiler les items de la liste vers le haut def __keypress_up__(event=None): """Fonction interne""" self.index = self.index - 1 __actu_entry__() # Déplacement de la molette de souris quand le focus est sur # Action de la molette de la souris. Défilement des items de la liste. def __mouse_wheel__(event): """Fonction interne""" self.index = self.index + int(-event.delta/120) __actu_entry__() # --------------------------------------------------------------- self.entry=Entry(self, self.__widget_arg__('entry', self.Arg), borderwidth=0, font='Arial, 8', textvariable=self.sVar, width = self.width) self.entry.grid(row=0, column=0) self.entry.bind('',__keypress_down__) # touche bas self.entry.bind('',__auto_completion__) self.entry.bind('',__mouse_wheel__) # Molette de souris self.entry.bind('',__keypress_up__) # touche haut #