IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Optimisation exercice Swinnen 14.1


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Points : 113
    Points
    113
    Par défaut Optimisation exercice Swinnen 14.1
    Bonjour,

    J'ai fait l'exercice 14.1 du Swinnen. Quelqu'un peut t il me montrer comment optimiser le code?
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    #exercice 14.1
    #evolution de la combobox. La listbox et l'ascenseur sont dans
    #une fenetre toplevel situé juste sous l'entry. La fenetre disparait à la
    #selection de l'item dans la listbox
     
    from tkinter import *
     
    class ComboFull(Frame):
        "Widget composite associant un champ d'entrée avec une boîte de liste dans une fenetre"
        def __init__(self,boss,item='',items=[],command='',width=10,listSize=5):
            Frame.__init__(self,boss) #constructeur de la classe parente
            # (<boss> est la réf. du widget 'maître')
            self.items =items # items à placer dans la boîte de liste
            self.command =command # fonction à invoquer après clic ou <Enter>
            self.item =item # item entré ou sélectionné
            self.listSize = listSize
            self.width = width
            self.boss = boss # self.boss pour avoir une reference lors de
                             # la recuperation des coordonnées sur l écran
     
            # Champ d'entrée :
            self.entree =Entry(self, width =width) # largeur en caractères
            self.entree.insert(END, item)
            self.entree.bind("<Return>", self.sortieE)
            self.entree.pack(side =LEFT)
     
            #Bouton d'appel de la fenetre
            self.bou = PhotoImage(file= "down.gif") 
            Button(self, image = self.bou, command = self.popup).pack()
     
        def sortieL(self, event =None):
            # Extraire de la liste l'item qui a été sélectionné :
            index =self.bListe.curselection() # renvoie un tuple d'index
            ind0 =int(index[0]) # on ne garde que le premier
            self.item =self.items[ind0]
            # Actualiser le champ d'entrée avec l'item choisi :
            self.entree.delete(0, END)
            self.entree.insert(END, self.item)
            # Exécuter la commande indiquée, avec l'item choisi comme argument :
            self.command(self.item)
            self.pop.destroy()
     
        def sortieE(self, event =None):
            # Exécuter la commande indiquée, avec l'argument-item encodé tel quel :
            self.command(self.entree.get())
     
        def get(self):
            # Renvoyer le dernier item sélectionné dans la boîte de liste
            return self.item
     
        def popup(self):
            #ouverture d'une fenetre toplevel contenant le comboBox"
     
     
            x= self.winfo_x() #position de la frame
            y= self.winfo_y() #dans la fenetre principale (Master?)
     
     
            xM = self.boss.winfo_x() # position du Master
            yM = self.boss.winfo_y() # sur l'ecran
     
            xT = xM + x + 5        #position du toplevel
            yT = yM + y + 30       #sous l'entry
     
            # Creation fenetre satellite sous l'entry
            self.pop = Toplevel() # self.pop plutot que pop pour pouvoir detruire
                                  # le toplevel
     
            self.pop.geometry("+{0}+{1}".format(xT,yT))
            self.pop.overrideredirect(1) # => fenêtre sans bordure ni bandeau
            self.pop.attributes("-topmost",1) # affichage du toplevel au dessus
     
     
            # Boîte de liste, munie d'un ascenseur (scroll bar) :
            cadreLB =Frame(self.pop) # cadre pour l'ensemble des 2
            self.bListe =Listbox(cadreLB, height =self.listSize, width =self.width-2)
            self.scrol =Scrollbar(cadreLB, command =self.bListe.yview)
            self.bListe.config(yscrollcommand =self.scrol.set)
            self.bListe.bind("<ButtonRelease-1>", self.sortieL)
            self.bListe.pack(side =LEFT)
            self.scrol.pack(expand =YES, fill =Y)
            cadreLB.pack()
     
            # Remplissage de la boîte de liste avec les items fournis :
            for it in self.items:
                self.bListe.insert(END, it)
     
     
    if __name__ =="__main__": # --- Programme de test ---
        def changeCoul(col):
            fen.configure(background = col)
     
        def changeLabel():
            lab.configure(text = combo.get())
     
        couleurs = ('navy', 'royal blue', 'steelblue1', 'cadet blue',
        'lawn green', 'forest green', 'yellow', 'dark red',
        'grey80','grey60', 'grey40', 'grey20', 'pink')
        fen =Tk()
        combo =ComboFull(fen, item ="néant", items =couleurs, command =changeCoul,
        width =15, listSize =6)
        combo.grid(row =1, columnspan =2, padx =10, pady =10)
        bou = Button(fen, text ="Test", command =changeLabel)
        bou.grid(row =3, column =0, padx =8, pady =8)
        lab = Label(fen, text ="Bonjour", bg ="ivory", width =15)
        lab.grid(row =3, column =1, padx =8)
        fen.mainloop()

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 837
    Points : 7 142
    Points
    7 142
    Par défaut
    Que veut dire optimiser pour toi ? et optimiser quoi en particulier ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. [Python 3.X] Exercice swinnen 10.7 question sur la solution et question d'ordres divers
    Par papyfouette dans le forum Général Python
    Réponses: 9
    Dernier message: 22/03/2015, 23h43
  2. Obtenir la solution exercices du bouquin Swinnen
    Par rlejeune dans le forum Général Python
    Réponses: 1
    Dernier message: 26/08/2007, 04h53
  3. Réponses: 3
    Dernier message: 22/12/2005, 00h40
  4. [Cours Swinnen][Tkinter] bloqué à un exercice
    Par babar89 dans le forum Tkinter
    Réponses: 4
    Dernier message: 18/10/2005, 16h48
  5. [cours de G.Swinnen] exercice 66
    Par airod dans le forum Tkinter
    Réponses: 4
    Dernier message: 14/10/2005, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo