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 :

Gestion d'évènement Combobox


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut Gestion d'évènement Combobox
    Bonjour à tous,

    Je créer cette discussion car je n'arrive pas à trouver d'information concernant la gestion d'évènement sur python.

    Je m'explique: je suis en train de développer un petit programme pour gérer mon parc d'utilisateurs et d'ordinateurs.

    Sur une de mes fenêtre qui me permettra de créer des utilisateurs j'ai 3 Combobox: Division /Section / Atelier.
    Je voudrai que lorsque je sélectionne la combo div que cela réinitialise ( ou "clear") les combo Section et Atelier; de même pour la combo Section vis-à-vis de la combo Atelier.

    Sauf que la documentation sur la gestion d'évènement est quasi-inexistante, de plus je n'arrive pas a trouver une méthode pour Clear proprement le combo,
    soit cela ne fonctionne pas soit cela enlève tout et provoque une erreur.

    J'en appelle donc à votre expérience afin de me guider ou me donner certains lien qui pourraient m'aiguiller afin que je puisse régler ce petit soucis qui n'est en soit qu'une optimisation
    mais pourrait permettre à mieux comprendre la gestion des évènements.

    J'espère avoir été assez clair. Si besoin je suis disponible pour vous fournir plus d'information
    merci d'avance pour le temps passé la dessus et les réponses (s'il y en a )

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 799
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par jeanfly Voir le message
    Si besoin je suis disponible pour vous fournir plus d'information
    Oui, par exemple la librairie IHM que tu utilises (tk, Gtk, Qt) ce serait un bon point de départ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Oui, par exemple la librairie IHM que tu utilises (tk, Gtk, Qt) ce serait un bon point de départ...
    j'utilise tk et tk.ttk pour les treeview et combobox

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 799
    Billets dans le blog
    1
    Par défaut
    J'ai bien fait de demander, ça m'évite du temps perdu à t'expliquer les ComboBox Qt. Désolé je n'utilise pas tk/ttk.
    La prochaine fois, commence par préciser ce que tu utilises.
    Remarque le fait que tu dises ne pas avoir trouvé de méthode pour nettoyer la Combo était un indice que ce n'était pas Qt car les QCombo possèdent une méthode clear() parfaitement fonctionnelle et bien décrite dans la doc.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 676
    Par défaut
    Salut,

    Citation Envoyé par jeanfly Voir le message
    Sauf que la documentation sur la gestion d'évènement est quasi-inexistante, de plus je n'arrive pas a trouver une méthode pour Clear proprement le combo,
    soit cela ne fonctionne pas soit cela enlève tout et provoque une erreur.
    Il y a 2 éléments dans une combobox: les valeurs affichées dans la dropdown list et la sélection.
    Et 2 méthodes pour la nettoyer, la remplacer par une nouvelle ou modifier la dropdown list et la sélection à vide.

    Pour les détails, il y a la documentation.

    Citation Envoyé par jeanfly Voir le message
    la documentation sur la gestion d'évènement est quasi-inexistante
    Les évènements des widgets ttk se gèrent de la même manière que les évènements tkinter.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Les évènements des widgets ttk se gèrent de la même manière que les évènements tkinter.
    Je veux bien le croire mais justement à part le "<<ComboboxSelected>>" je ne vois pas d'autre type d'évènements ou du moins je n'en ai pas trouvé : d'où ma question concernant des info sur ces différents event et leur gestion ou a minima de la doc si cela existe ^^

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 676
    Par défaut
    Citation Envoyé par jeanfly Voir le message
    justement à part le "<<ComboboxSelected>>" je ne vois pas d'autre type d'évènements ou du moins je n'en ai pas trouvé
    Un évènement, c'est d'abord une action de l'utilisateur via clavier/souris que l'on va associer à l'appel d'une fonction lorsqu'il arrive. Ça n'a rien de spécifique a un widget sauf cas particulier documenté dans ce cas là.
    Reste à savoir ce que vous espérez côté évènement en plus côté Combobox...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Reste à savoir ce que vous espérez côté évènement en plus côté Combobox...
    Comme je l'avais dit je voudrais juste pouvoir "clear" mes combobox lorsque la combo "parent" change dans le sens DIV > Section > Atelier

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 676
    Par défaut
    Citation Envoyé par jeanfly Voir le message
    Comme je l'avais dit je voudrais juste pouvoir "clear" mes combobox lorsque la combo "parent" change dans le sens DIV > Section > Atelier
    J'ai déjà répondu à cette question (et elle n'a rien à voir avec les évènements).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Invité
    Invité(e)
    Par défaut
    Salut !

    J'arrive avec un script pour te donner un exemple assez complet de ce que tu veux faire avec des annotations...

    WAIT & SEE

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    J'arrive avec un script pour te donner un exemple assez complet de ce que tu veux faire avec des annotations...
    WAIT & SEE
    Merci c'est sympa ! pas de soucis j'attend avec impatience !!

  12. #12
    Invité
    Invité(e)
    Par défaut
    Voici donc le script :
    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
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    import tkinter as tk
    from tkinter import ttk
     
    def date_changed(event):
        global yearchoosen, monthchoosen, daychoosen
     
        if event.widget.grid_info()['column'] == 0: #grid_info() permet de donner en autres la position (column, row) du widget en question
            #Avant de pouvoir supprimer le contenu d'un widget il faut le remettre en "state" : "normal"
            monthchoosen['state'] = 'normal'
            monthchoosen.delete(0, tk.END)
     
        elif event.widget.grid_info()['column'] == 1:
            #Avant de pouvoir supprimer le contenu d'un widget il faut le remettre en "state" : "normal"
            daychoosen['state'] = 'normal'
            daychoosen.delete(0, tk.END)
     
        elif event.widget.grid_info()['column'] == 2:        
            print('Date sélectionnée :', daychoosen.get(), monthchoosen.get(), yearchoosen.get())
     
            #On fige la ligne
            yearchoosen['state'] = 'disabled'
            monthchoosen['state'] = 'disabled'
            daychoosen['state'] = 'disabled'
     
            row = event.widget.grid_info()['row'] 
     
            nb_of_row = window.grid_size()[1]
            #Si on a rempli la dernière ligne on crée 2 boutons (mise à jour, suppression) placés à droite de la ligne et une nouvelle est créée
            if nb_of_row == row+1:
                create_cbbx(r = row + 1)
                create_button(r = row)
     
            ''' EN OPTION : ENLEVER LES # ET METTRE # DEVANT CETTE LIGNE '''
            ''' EN LIEN AVEC LA LIGNE 84 (METTRE # DEVANT CETTE LIGNE) '''
            #else:
            #    #grid_slaves() énumère tous les widgets dans la grille en commençant par le dernier
            #    #Trouver les lignes incomplètes et mettre les cbbox à normal
            #    rows = []
            #    for widget in window.grid_slaves()[::-1]:
            #        if widget.widgetName == 'ttk::combobox':    
            #            if not widget.get():
            #                rows.append(widget.grid_info()['row'])
            #    
            #    #set permet de supprimer les doublons cf. google ^^
            #    for row in set(rows):
            #        #L'attribut row de grid_slaves() permet de donner uniquement les widgets présents dans la ligne souhaitée
            #        for widget in window.grid_slaves(row = row)[::-1]:
            #            if widget.widgetName == 'ttk::combobox':
            #                if widget.grid_info()['column'] == 0:
            #                    yearchoosen = widget
            #                elif widget.grid_info()['column'] == 1 :
            #                    monthchoosen = widget
            #                elif widget.grid_info()['column'] == 2:
            #                    daychoosen = widget 
            #    
            #        yearchoosen['state'] = 'normal'
            #        if yearchoosen.get():                
            #            monthchoosen['state'] = 'normal'
            #            
            #        if monthchoosen.get():
            #            daychoosen['state'] = 'normal'
     
     
    def update_row(event):
        global yearchoosen, monthchoosen, daychoosen
     
        #grid_slaves() énumère tous les widgets dans la grille en commençant par le dernier
        for widget in window.grid_slaves()[::-1]:
            if widget.grid_info()['row'] == event.widget.row:
                if widget.widgetName == 'ttk::combobox':
                    #Avant de pouvoir supprimer le contenu d'un widget il faut le remettre en "state" : "normal"
                    widget['state'] = 'normal'
                    widget.delete(0, tk.END)
     
                    if widget.grid_info()['column'] > 0:
                        widget['state'] = 'disabled'
                    if widget.grid_info()['column'] == 0:
                        yearchoosen = widget
                    elif widget.grid_info()['column'] == 1:
                        monthchoosen = widget
                    elif widget.grid_info()['column'] == 2:
                        daychoosen = widget
     
            ''' EN OPTION : ENLEVER LES # ET METTRE UN # DEVANT CETTE LIGNE '''   
            ''' ASSEZ PEU UTILE (METTRE # DEVANT CETTE LIGNE) '''
            ##On désactive les cbbox qui ne sont pas sur la ligne          
            #elif widget.grid_info()['row'] != event.widget.row:
            #    if widget.widgetName == 'ttk::combobox': 
            #       widget['state'] = 'disabled'
     
    def delete_row(event):
        global yearchoosen, monthchoosen, daychoosen
        for widget in window.grid_slaves(row=event.widget.row):
            widget.grid_remove()
     
     
    def select_cbbox(event):  
        global yearchoosen, monthchoosen, daychoosen
     
        row = event.widget.grid_info()['row']
     
        for widget in window.grid_slaves(row = row)[::-1]:
            if widget.widgetName == 'ttk::combobox':    
                if widget.grid_info()['column'] == 0:
                    yearchoosen = widget
                elif widget.grid_info()['column'] == 1 :
                    monthchoosen = widget
                elif widget.grid_info()['column'] == 2:
                    daychoosen = widget 
     
    def create_button(r):
        global button, button_2, pixelVirtual
     
        #Astuce pour avoir la taille du bouton en pixel
        pixelVirtual = tk.PhotoImage(width=1, height=1)
     
        #Créer le bouton ⭮ qui met à jour la ligne
        button = tk.Button(window, text='⭮', width=15, height=15, bg='Green', fg='White', image=pixelVirtual, compound="c", font=('Helvetica', 12, 'bold'), activebackground='White', activeforeground='Green')
        '''UNE AUTRE FACON DE MEMORISER L'EMPLACEMENT DES BOUTONS = RAJOUTER UN ATTRIBUT (row) SUR L'INSTANCE DE CLASSE (button)'''
        button.row = r 
        button.bind('<ButtonRelease-1>', update_row)
        button.grid(row=r, column=3)
     
        #Créer le bouton ❌ qui supprime la ligne
        button_2 = tk.Button(window, text='❌', width=15, height=15, bg='Red', fg='White', image=pixelVirtual, compound="c", font=('Helvetica', 12), activebackground='White', activeforeground='Red')
        button_2.row = r
        button_2.bind('<ButtonRelease-1>', delete_row)
        button_2.grid(row=r, column=4, padx = 18)
     
    def create_cbbx(r=1):
        global yearchoosen, monthchoosen, daychoosen
        #YEAR
        y = tk.StringVar()
        yearchoosen = ttk.Combobox(window, width = 27, 
                                    textvariable = y)
     
        # Adding combobox drop down list
        yearchoosen['values'] = [2022-i for i in range(0,125)]
     
        #Binding & place widget with grid
        yearchoosen.bind('<<ComboboxSelected>>', date_changed)
        yearchoosen.bind('<Enter>', select_cbbox)
        yearchoosen.grid(column = 0, row = r, padx = 10)
     
        # Shows 2022 as a default value
        #yearchoosen.current(0)
     
        #MONTH 
        m = tk.StringVar()
        monthchoosen = ttk.Combobox(window, width = 27, 
                                    textvariable = m)
     
        # Adding combobox drop down list
        monthchoosen['values'] = (' January', 
                                ' February',
                                ' March',
                                ' April',
                                ' May',
                                ' June', 
                                ' July', 
                                ' August', 
                                ' September', 
                                ' October', 
                                ' November', 
                                ' December')
     
        #Set state to Disable
        monthchoosen['state'] = 'disabled'
     
        #Binding & place widget with grid
        monthchoosen.bind('<<ComboboxSelected>>', date_changed)    
        monthchoosen.bind('<Enter>', select_cbbox)
        monthchoosen.grid(column = 1, row = r, padx = 10)
     
        # Shows January as a default value
        #monthchoosen.current(0)
     
        #DAY
        d = tk.StringVar()
        daychoosen = ttk.Combobox(window, width = 27, 
                                    textvariable = d)
     
        # Adding combobox drop down list
        daychoosen['values'] = [i for i in range(1,31)]
     
        #Set state to Disable
        daychoosen['state'] = 'disabled'
     
        #Binding & place widget with grid
        daychoosen.bind('<<ComboboxSelected>>', date_changed)  
        daychoosen.bind('<Enter>', select_cbbox)    
        daychoosen.grid(column = 2, row = r, padx = 10)
     
        # Shows 1 as a default value
        #daychoosen.current(1) 
     
    # Creating tkinter window
    window = tk.Tk()
    window.geometry('1200x350')
     
    # Labels
    ttk.Label(window, text = "Select the Year :", 
            font = ("Times New Roman", 10)).grid(column = 0, 
            row = 0, padx = 120, pady = 5)
     
    ttk.Label(window, text = "Select the Month :", 
            font = ("Times New Roman", 10)).grid(column = 1, 
            row = 0, padx = 120, pady = 5)
     
    ttk.Label(window, text = "Select the Day :", 
            font = ("Times New Roman", 10)).grid(column = 2, 
            row = 0, padx = 120, pady = 5)
     
    #Comboboxs
    create_cbbx()
     
    window.mainloop()
    J'ai utilisé plusieurs façons de gérer les choses, il est possible de simplifier le script plutôt que d'utiliser des variables globales il est possible de rechercher les combobox qui nous intéresse ce qui simplifierait la lecture.
    J'ai voulu te montrer un peu toutes les possibilités de codage... Je te prépare une version un peu simplifiée ou tout du moins plus cohérente !

    La version simplifiée :
    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
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    import tkinter as tk
    from tkinter import ttk
     
    def date_changed(event):
        for widget in window.grid_slaves(row=event.widget.grid_info()['row']):
            if widget.grid_info()['column'] == 2:
                day_bx = widget        
     
            elif widget.grid_info()['column'] == 1:
                month_bx = widget
                if month_bx.get():
                    day_bx['state'] = 'normal'
     
            elif widget.grid_info()['column'] == 0:
                year_bx = widget
                if year_bx.get():
                    month_bx['state'] = 'normal'
     
        if day_bx.get():
            print('Date sélectionnée :', day_bx.get(), month_bx.get(), year_bx.get())
            day_bx['state'] = 'disabled'
            month_bx['state'] = 'disabled'
            year_bx['state'] = 'disabled'
     
            row = event.widget.grid_info()['row'] 
     
            nb_of_row = window.grid_size()[1]
            #Si on a rempli la dernière ligne on crée 2 boutons (mise à jour, suppression) placés à droite de la ligne et une nouvelle est créée
            if nb_of_row == row+1:
                create_cbbx(r = row + 1)
                create_button(r = row)
     
    def update_row(event):  
        #grid_slaves() énumère tous les widgets dans la grille en commençant par le dernier
        for widget in window.grid_slaves()[::-1]:
            if widget.grid_info()['row'] == event.widget.grid_info()['row']:
                if widget.widgetName == 'ttk::combobox':
                    #Avant de pouvoir supprimer le contenu d'un widget il faut le remettre en "state" : "normal"
                    widget['state'] = 'normal'
                    widget.delete(0, tk.END)
     
                    if widget.grid_info()['column'] > 0:
                        widget['state'] = 'disabled'
     
    def delete_row(event):
        for widget in window.grid_slaves(row=event.widget.grid_info()['row']):
            widget.grid_remove()
     
    def create_button(r):
        global button, button_2, pixelVirtual
     
        #Astuce pour avoir la taille du bouton en pixel
        pixelVirtual = tk.PhotoImage(width=1, height=1)
     
        #Créer le bouton ⭮ qui met à jour la ligne
        button = tk.Button(window, text='⭮', width=15, height=15, bg='Green', fg='White', image=pixelVirtual, compound="c", font=('Helvetica', 12, 'bold'), activebackground='White', activeforeground='Green')
        button.bind('<ButtonRelease-1>', update_row)
        button.grid(row=r, column=3)
     
        #Créer le bouton ❌ qui supprime la ligne
        button_2 = tk.Button(window, text='❌', width=15, height=15, bg='Red', fg='White', image=pixelVirtual, compound="c", font=('Helvetica', 12), activebackground='White', activeforeground='Red')
        button_2.bind('<ButtonRelease-1>', delete_row)
        button_2.grid(row=r, column=4, padx = 18)
     
    def create_cbbx(r=1):
        #YEAR
        y = tk.StringVar()
        yearchoosen = ttk.Combobox(window, width = 27, 
                                    textvariable = y)
     
        # Adding combobox drop down list
        yearchoosen['values'] = [2022-i for i in range(0,125)]
     
        #Binding & place widget with grid
        yearchoosen.bind('<<ComboboxSelected>>', date_changed)
        yearchoosen.grid(column = 0, row = r, padx = 10)
     
        # Shows 2022 as a default value
        #yearchoosen.current(0)
     
        #MONTH 
        m = tk.StringVar()
        monthchoosen = ttk.Combobox(window, width = 27, 
                                    textvariable = m)
     
        # Adding combobox drop down list
        monthchoosen['values'] = (' January', 
                                ' February',
                                ' March',
                                ' April',
                                ' May',
                                ' June', 
                                ' July', 
                                ' August', 
                                ' September', 
                                ' October', 
                                ' November', 
                                ' December')
     
        #Set state to Disable
        monthchoosen['state'] = 'disabled'
     
        #Binding & place widget with grid
        monthchoosen.bind('<<ComboboxSelected>>', date_changed)    
        monthchoosen.grid(column = 1, row = r, padx = 10)
     
        # Shows January as a default value
        #monthchoosen.current(0)
     
        #DAY
        d = tk.StringVar()
        daychoosen = ttk.Combobox(window, width = 27, 
                                    textvariable = d)
     
        # Adding combobox drop down list
        daychoosen['values'] = [i for i in range(1,31)]
     
        #Set state to Disable
        daychoosen['state'] = 'disabled'
     
        #Binding & place widget with grid
        daychoosen.bind('<<ComboboxSelected>>', date_changed) 
        daychoosen.grid(column = 2, row = r, padx = 10)
     
        # Shows 1 as a default value
        #daychoosen.current(1) 
     
    # Creating tkinter window
    window = tk.Tk()
    window.geometry('1200x350')
     
    # Labels
    ttk.Label(window, text = "Select the Year :", 
            font = ("Times New Roman", 10)).grid(column = 0, 
            row = 0, padx = 120, pady = 5)
     
    ttk.Label(window, text = "Select the Month :", 
            font = ("Times New Roman", 10)).grid(column = 1, 
            row = 0, padx = 120, pady = 5)
     
    ttk.Label(window, text = "Select the Day :", 
            font = ("Times New Roman", 10)).grid(column = 2, 
            row = 0, padx = 120, pady = 5)
     
    #Comboboxs
    create_cbbx()
     
    window.mainloop()
    Dernière modification par Invité ; 06/09/2022 à 17h01.

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 799
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if event.widget.grid_info()['column'] == 0:
    	trucA
    elif event.widget.grid_info()['column'] == 1:
    	trucB        
    elif event.widget.grid_info()['column'] == 2:
    	trucC
    Au cas où la colonne pourrait avoir une autre valeur que 0, 1 ou 2 tu veux dire???

    Accessoirement Python 3.10 a introduit le switch/case
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    match event.widget.grid_info()['column']
    	case 0:
    		trucA
    	case 1:
    		trucB
    	case 2:
    		trucC
    # match
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Invité
    Invité(e)
    Par défaut
    Ben euh, c'est possible de faire autrement ? Les instructions étant différentes.
    J'ai trouvé cette manière de procéder pour savoir si on est dans une combobox Année ou Mois ou Jour. Sinon on peut squatter l'instance de classe et rajouter un truc du genre : combobox.nom = "Year".

    match et case ça fait gagner du temps ? Ca me dit vaguement quelques choses, ce truc...

    Contrairement au PO, je n'ai pas utilisé de TreeView n'en ayant jamais utilisé...

  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 799
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Ben euh, c'est possible de faire autrement ? Les instructions étant différentes.
    Ce que je voulais dire, c'est qu'il n'est pas besoin de "elif" pour le dernier cas. Le "else" suffit.
    Et c'est heureux que les instructions soient différentes, c'est en effet un prérequis incontournable pour coder une alternative. Parce qu'écrire if ...: trucA else: trucA ça n'a que peu d'intérêt.

    Citation Envoyé par LeNarvalo Voir le message
    match et case ça fait gagner du temps ?
    En tout cas ça fait gagner du code.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ce que je voulais dire, c'est qu'il n'est pas besoin de "elif" pour le dernier cas. Le "else" suffit.
    Oui si on met la condition if widget.widgetName == 'ttk::combobox': avant, histoire de ne pas choper les widgets boutons.

    Citation Envoyé par Sve@r Voir le message
    En tout cas ça fait gagner du code.
    Oki ! Tu vas y passer du coup, à python 3.10 ?



    Si non @jeanfly pour gérer les divisions / sections / atelier, as-tu pensé utiliser un dictionnaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> divisions = {'raffinement des macrodonnées':{'section A':('Atelier 1', 'Atelier 2', 'Atelier 3'), 'section B':('Atelier 1', 'Atelier 2', 'Atelier 3')},\
    ...              'optique et design':{'section A':('Atelier 1', 'Atelier 2', 'Atelier 3'), 'section B':('Atelier 1', 'Atelier 2', 'Atelier 3'), 'sections B':('Atelier 1', 'Atelier 2', 'Atelier 3'), 'section D':('Atelier 1', 'Atelier 2', 'Atelier 3')},\
    ...              'maintenance':{'section A':('Atelier 1', 'Atelier 2', 'Atelier 3')}}
    ...              
    >>> divisions['raffinement des macrodonnées']['section B']
    ...              
    ('Atelier 1', 'Atelier 2', 'Atelier 3')
    @Sev tu as la réferance ?

    (Fautes volontaires)
    Dernière modification par Invité ; 06/09/2022 à 19h45.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Si non @jeanfly pour gérer les divisions / sections / atelier, as-tu pensé utiliser un dictionnaire ?
    Salut, déjà merci pour tout ca je vais seulement pouvoir me pencher dessus ^^
    et sinon j'utilise une table SQL pour gérer mes div section ateliers

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jeanfly Voir le message
    et sinon j'utilise une table SQL pour gérer mes div section ateliers
    (MySQL, SQLite, PostgreSQL ? J'y connais pas grand chose... pour ne pas dire rien.)

  19. #19
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 799
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Oki ! Tu vas y passer du coup, à python 3.10 ?
    J'y arriverai mais c'est pas le switch/case qui en sera la raison.

    Citation Envoyé par LeNarvalo Voir le message
    (MySQL, SQLite, PostgreSQL ? J'y connais pas grand chose... pour ne pas dire rien.)
    Ben faut t'y mettre !!! Moi je suis sous Postgres. J'avais tenté MySQL à un moment mais bon déjà les possibilités avancées sont payantes et surtout à l'époque où j'y étais (2007), elle ne savait pas gérer les contraintes d'intégrités sur des clefs composées. Si la clef était simple ok elle pouvait mais si la clef était composée de plusieurs champs là elle ne savait pas faire. Peut-être qu'aujourd'hui elle sait faire mais c'est trop tard, je suis passé à Postgres qui, elle, est 100% gratuite.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    J'ai pas encore tout analysé mais j'ai déjà pu tester ta méthode pour réinitialiser la Combo section quand la Combo Div change et ce fonctionne bien . Niquel merci !
    En revanche j'avais essayé d'être plus précis car ma fenêtre dispose de plusieurs frames et j'aurai surement un widget situé sur une autre frame mais au même emplacement niveau 'row' et/ou 'column'
    du coup ma question étant s'il est possible de préciser la frame afin de ne faire qu'une méthode générique et si ce n'est pas possible tant pis je ferai 2 méthodes.
    Dans tous les cas encore merci pour tout ca c'est top !!!!!

Discussions similaires

  1. [QtGui] ComboBox - gestion des évènements
    Par pibol dans le forum PyQt
    Réponses: 3
    Dernier message: 13/02/2013, 13h09
  2. Problème avec la gestion des événements
    Par CynO dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 10h07
  3. [JTable] gestion des événements
    Par soulhouf dans le forum Composants
    Réponses: 4
    Dernier message: 19/08/2005, 13h21
  4. Gestion des évènements lors d'un clique sur une image.
    Par yoghisan dans le forum Débuter
    Réponses: 7
    Dernier message: 23/06/2005, 19h04
  5. Gestion d'événements hors tables
    Par Quentin dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 11/02/2005, 00h09

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