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. #21
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 332
    Par défaut
    bonjour
    Citation Envoyé par LeNarvalo Voir le message
    Voici donc le script :
    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 !
    (var non globale) pas vraiment d'accord, utiliser le positionnement dans l'interface graphique est justement une chose à ne jamais faire : on va lier une logique métier à une présentation graphique

    Sans utiliser de variables globales : il est possible de passer 36 paramètres à notre fonction qui va répondre à l'événement (lambda)

    petit exemple de passage de paramètres (ici trop de paramètres mais c'est pour l'exemple):

    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
    #!/usr/bin/env python
    import tkinter as tk
    from tkinter import ttk
     
     
    def combo_change(event, id, le_groupe):
        print("combo_change()..., actif est: ", id)
        print("event.widget", event.widget, event.widget.nom)
        widget = event.widget
        print("widget...", widget, id)
        print("widget...", widget.widgetName)  # .!combobox
        print("widget...", widget.nom)
        print("combo widget data ...", widget.get())
        print("groupe:", le_groupe)
     
        # regle metier à définir
        le_groupe[1]['state'] = 'disabled' if not le_groupe[0].get() else 'enabled'
        le_groupe[2]['state'] = 'disabled' if not le_groupe[0].get() else 'enabled'
        le_groupe[2]['state'] = 'disabled' if not le_groupe[1].get() else 'enabled'
     
        for combo in le_groupe:
            print(" - ", combo.nom, combo.get())
     
     
    window = tk.Tk()
    window.geometry('800x600')
     
     
    combo_group=()
     
    combo = ttk.Combobox(window, width = 27)
    combo['values'] = [2022-i for i in range(0,25)]
    combo['values'] = ("",) + combo['values']
    combo.nom = "année"
    combo.bind("<<ComboboxSelected>>", lambda event: combo_change(event, "année",combo_group))
    combo.pack()
    combo_group = combo_group + (combo,)
     
    combo = ttk.Combobox(window, width = 27)
    combo['values'] = [m for m in range(1,13)]
    combo['values'] = ("",) + combo['values']
    combo.nom = "mois"
    combo.bind("<<ComboboxSelected>>", lambda event: combo_change(event, "mois", combo_group))
    combo.pack()
    combo_group = combo_group + (combo,)
     
    combo = ttk.Combobox(window, width = 27)
    combo['values'] = [m for m in range(1,31)]
    combo.nom = "jour"
    combo.bind("<<ComboboxSelected>>", lambda event: combo_change(event, "jour", combo_group))
    combo.pack()
    combo_group = combo_group + (combo,)
     
    window.mainloop()

  2. #22
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par jeanfly Voir le message
    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.
    Partir d'une suite 1, 2, 3, 4, ... d'objets où le choix du nième entraînera une action sur les suivants passe par la création d'une liste (pour matérialiser l'ordre, la séquence).

    Une liste d'entiers ou une liste de widgets ne change pas grand chose (c'est juste plus long à écrire).

    Et si la fonction de choix du nième item de la liste set fait via la saisie d'un index ou le clic sur un des widgets de la liste, c'est la même mécanique: on part de l'index et on agit sur les suivants.
    Pour illustrer la mécanique, on peut écrire:
    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
    import tkinter as tk
     
    root = tk.Tk()
     
    widgets = []
     
    for i in range(4):
        w = tk.Label(root, text=i, width=10)
        w.pack(side='left')
        widgets.append(w)
     
    def on_click(event):
        w = event.widget
        i = widgets.index(w)
        for w in widgets[i+1:]:
            w['text'] = w['text']+1
     
    root.bind('<1>', on_click)
    tk.mainloop()
    J'ai choisi d'utiliser un Label parce que la Combobox ne change rien: on se retrouve toujours avec un event qui récupère l'index du widget dans une liste pour triturer les suivants...
    Comme la relation entre les widgets à modifier est matérialisée par une liste, elle est indépendante de la relation avec les autres widgets.

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

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

    Citation Envoyé par Sve@r Voir le message
    Ben faut t'y mettre !!!
    Non !!! ^^
    J'ai tout simplement pas l'utilité, un peu de Sqlite une fois en 10 ans, youpi !



    Citation Envoyé par papajoker Voir le message
    (var non globale) pas vraiment d'accord, utiliser le positionnement dans l'interface graphique est justement une chose à ne jamais faire : on va lier une logique métier à une présentation graphique
    En quoi est-ce autant problématique ? Si on modifie l'interface graphique ?
    C'est quand même bien pratique pour choper les autres combobox sur la même ligne, mais j'avoue qu'avec ton combo_group on est sûr de ne pas se tromper, presque inutile de squatter la combobox avec l'attribut nom, ceinture et bretelle ?



    @jeanfly
    Oui c'est possible de gérer le tout avec une seule méthode en adaptant la chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def common_function(event):
        #print(event.widget.grid_info())
        widget = event.widget
        print(widget.grid_info()['in'])
        #Ou encore :
        print(widget.winfo_parent())
    Mais comme signalé par papajoker, il serait préférable de procéder autrement qu'avec ma proposition.

  4. #24
    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
    (MySQL, SQLite, PostgreSQL ? J'y connais pas grand chose... pour ne pas dire rien.)
    je suis sous MariaDb avec Mysql workbench histoire de pouvoir utiliser ce que j'apprend pour le boulot qui utilise cette base


    et merci à tous pour les reponse je n'avais pas vu au début qu'il y avait 2 pages je me penche dessus dès demain

Discussions similaires

  1. [QtGui] ComboBox - gestion des évènements
    Par pibol dans le forum PyQt
    Réponses: 3
    Dernier message: 13/02/2013, 14h09
  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, 11h07
  3. [JTable] gestion des événements
    Par soulhouf dans le forum Composants
    Réponses: 4
    Dernier message: 19/08/2005, 14h21
  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, 20h04
  5. Gestion d'événements hors tables
    Par Quentin dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 11/02/2005, 01h09

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