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

wxPython Discussion :

combobox 2 selection dans combobox 1 wxpython [Python 3.X]


Sujet :

wxPython

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Points : 28
    Points
    28
    Par défaut combobox 2 selection dans combobox 1 wxpython
    Bonjour,

    j'aimerai bien avoir votre aide en ce qui concerne les combobox j'ai crée un combobox dans une panel avec une liste ( visible, infrarouge, simulation)

    et j'aimerai créer un autre combobox 2 permet la sélection des types dans combobox 1 comme par exemple on a ( visible => vis01,vis04,vis06 et infrarou=>IR037,IR078 , ...,simulation=> simT12,simT52, ...)


    je trouve pas trop chose sur la sélection ou comment créer un combobox dans un autre :

    voici la partie de code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #2em panel
            pan2 = wx.Window(self.splitter, style=wx.DEFAULT_FRAME_STYLE)
            pan2.SetBackgroundColour("white")
    #choix
     
            List1 = ['Infrarouge', 'Visible','simulation']
            List2 = ['VIS04','VIS05','VIS06','VIS08','IR038','IR087','IR097','IR103','SIMT39','SIMT52','SIMT111]
     
            combobox1 = wx.ComboBox( pan2, id=wx.ID_ANY, choices = self.List1, style=wx.CB_DROPDOWN,pos=(80,5))
            combobox2 = wx.ComboBox( pan2 , id=wx.ID_ANY, choices = List2 )
    je sais pas après création de la 2em liste si faut faire une boucle ou comment lier le combobox 1 au combobox 2
    d'autre manière comment rendre combobox2 dépendant au combobox1

    voilà un exemple de ce que j'aimerai faire :

    Nom : exmpcombobox2.jpg
Affichages : 420
Taille : 3,6 Ko

    merci d'avance pour l'aide et explication ou exemple

  2. #2
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    L'image que tu montres ressemble plus à un menu qu'à des combobox.

    Lier une combobox en fonction de ce qui est sélectionné dans une première se fait à l'aide d'événement.
    Sachant que les choix possibles de la seconde dépendent de l'item sélectionné de la première, alors une structure de type dict est préférable pour enregistrer les items.

    Un exemple simple pour te montrer comment gérer ça.

    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
    choices = dict(
        Infrarouge=('IR038','IR087','IR097','IR103',),
        Visible=('VIS04','VIS05','VIS06','VIS08',),
        Simulation=('SIMT39','SIMT52','SIMT111',),
    )
     
    def onSelectCombobox1(evt) :
        selection = evt.GetString()
        print('Sélection combobox1 :', selection)
        # Récupération de la liste relative à la clef du dict choices
        lst = choices[selection]
        # Initialisation de la sélection de combobox2 à une chaîne vide
        combobox2.SetValue('')
        # Remplissage de la combobox2 avec cette liste
        combobox2.SetItems(lst)
     
    def onSelectCombobox2(evt) :
        selection = evt.GetString()
        print('Sélection combobox2 :', selection)
     
    # list(choices) contient les clefs du dict choices
    combobox1 = wx.ComboBox(pan2, choices=list(choices))
    combobox2 = wx.ComboBox(pan2)
     
    combobox_sizer = wx.BoxSizer(wx.HORIZONTAL)
    combobox_sizer.Add(combobox1)
    combobox_sizer.Add(combobox2)
    pan2.SetSizer(combobox_sizer)
     
    # Liaisons des événements des comboboxes
    combobox1.Bind(wx.EVT_COMBOBOX, onSelectCombobox1)
    combobox2.Bind(wx.EVT_COMBOBOX, onSelectCombobox2)
    Le temps ronge l'amour comme l'acide.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Points : 28
    Points
    28
    Par défaut
    Salut ,

    non je vous jure ce n'est pas un menu c'est juste j'ai pris une partie de combobox d'une autre application c'est pour ça c'est un combobox d'après même ce qu'il est sur l'application

    je vous réponds vite car y a coupure de l’électricité je vais voir demain lol je garde charge de mon pc

    merci beaucoup

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    j'ai essayé de suivre ce que m'avais expliquer mais quand j excute le code rien s'affiche meme pas le 1er combobox

    voilà

    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
    #2em panel
            pan2 = wx.Window(self.splitter, style=wx.DEFAULT_FRAME_STYLE)
            pan2.SetBackgroundColour("white")
            self.splitter.SplitVertically(pan1, pan2,100)
            choice = dict(Infrarouge=('IR038','IR087','IR097','IR103',),Visible=('VIS04','VIS05','VIS06','VIS08',),
        Simulation=('SIMT39','SIMT52','SIMT111',),),
     
        def onSelectCombobox(evt):
            selection = evt.GetString()
            print('Sélection combobox :', selection)
            list = choices[selection]
            combobox2.SetValue('')
            combobox2.SetItems(lst)
     
     
        def onSelectCombobox2(evt) :
             selection = evt.GetString()
             print('Sélection combobox2 :', selection)
             combobox = wx.ComboBox(pan2, choices=list(choice))
             combobox2 = wx.ComboBox(pan2)
             combobox_sizer = wx.BoxSizer(wx.HORIZONTAL)
             combobox_sizer.Add(combobox)
             combobox_sizer.Add(combobox2)
             pan2.SetSizer(combobox_sizer)
             combobox.Bind(wx.EVT_COMBOBOX, onSelectCombobox)
             combobox2.Bind(wx.EVT_COMBOBOX, onSelectCombobox2)
    je sais pas pourquoi

    merci

  5. #5
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Citation Envoyé par loula05 Voir le message
    je sais pas pourquoi
    Relis ton code, et compare-le au mien, en mettant une virgule en fin du dict choice, choice devient un tuple, et ce n'est pas ce qui est désiré.
    La déclaration des comboboxes n'a rien à faire dans la fonction onSelectCombobox2.

    Si tu as déjà du mal avec la logique de ce très simple bout de code, ça va quand même être difficile de continuer avec wx qui nécessite une bonne compréhension de l'objet python.
    Peut-être devrais-tu revoir tes objectifs et commencer avec tkinter qui est sans doute bien plus simple à apprendre que wx qui demande d'être un peu plus expérimenté et autonome avec python, surtout qu'avec tkinter, il y a beaucoup plus de documentations, exemples en tout genre sur internet et même ici sur developpez.
    Et sans doute aussi revoir les bases de python.
    Le temps ronge l'amour comme l'acide.

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    La déclaration des comboboxes n'a rien à faire dans la fonction onSelectCombobox2:

    je l'ai mis en meme alignement que def ! c'est quand je le mis en meme alignement il affiche un message d'erreur :

    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
    #2em panel
            pan2 = wx.Window(self.splitter, style=wx.DEFAULT_FRAME_STYLE)
            pan2.SetBackgroundColour("white")
            self.splitter.SplitVertically(pan1, pan2,100)
            choice = dict(Infrarouge=('IR038','IR087','IR097','IR103',),Visible=('VIS04','VIS05','VIS06','VIS08',),
        Simulation=('SIMT39','SIMT52','SIMT111',),)
     
        def onSelectCombobox(evt):
            selection = evt.GetString()
            print('Sélection combobox :', selection)
            list = choices[selection]
            combobox2.SetValue('')
            combobox2.SetItems(lst)
     
     
        def onSelectCombobox2(evt) :
             selection = evt.GetString()
             print('Sélection combobox2 :', selection)
         #declaration des combobox
        combobox = wx.ComboBox(parent, choices=list(choice))
        combobox2 = wx.ComboBox(parent)
        combobox_sizer = wx.BoxSizer(wx.HORIZONTAL)
        combobox_sizer.Add(combobox)
        combobox_sizer.Add(combobox2)
        pan2.SetSizer(combobox_sizer)
        combobox.Bind(wx.EVT_COMBOBOX, onSelectCombobox)
        combobox2.Bind(wx.EVT_COMBOBOX, onSelectCombobox2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "/home/sarah/app1true.py", line 36, in <module>
        class MainPanel(wx.Panel):
      File "/home/sarah/app1true.py", line 71, in MainPanel
        combobox = wx.ComboBox(pan2, choices=list(choice))
    NameError: name 'pan2' is not defined
    pour le wxPython j’essaie .. je veux pas travailler avec TKinter c'est pas un choix

  7. #7
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Il va de soi, que les 2 fonctions et non méthodes, onSelectCombobox* doivent se situer dans la métthode de ta classe MainPanel créant le panel2. Si tu désires en faire des méthodes de ta classe, libre à toi de modifier le code d'exemple en conséquence.
    Le temps ronge l'amour comme l'acide.

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Points : 28
    Points
    28
    Par défaut
    je pense que c'est comme un menu dans un combobox , je sais pas si possible de faire ça

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Points : 28
    Points
    28
    Par défaut
    j'ai essayé de mettre les combobox sur la penl a droite mais ca marche pas il s affiche mais y a rien panel vide

    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
    class RightPanel(wx.Panel):
        def __init__(self, parent):
            super().__init__(parent, size=(200, 500))
            #self.SetBackgroundColour("green")
            rightpanel = wx.Panel(self, -1, size = (200, 1000),style = wx.BORDER_SUNKEN)
     
            choices = dict(Infrarouge=('IR038','IR087','IR097','IR103',),Visible=('VIS04','VIS05','VIS06','VIS08',),
        Simulation=('SIMT39','SIMT52','SIMT111',),)
     
        def onSelectCombobox(evt):
            selection = evt.GetString()
            print('Sélection combobox :', selection)
            lst = choices[selection]
            combobox2.SetValue('')
            combobox2.SetItems(lst)
     
     
        def onSelectCombobox2(evt) :
             selection = evt.GetString()
             print('Sélection combobox2 :', selection)
             combobox = wx.ComboBox(rightpanel, choices=lst(choices))
             combobox2 = wx.ComboBox(rightpanel)
             combobox_sizer = wx.BoxSizer(wx.HORIZONTAL)
             combobox_sizer.Add(combobox)
             combobox_sizer.Add(combobox2)
             pan2.SetSizer(combobox_sizer)
             combobox.Bind(wx.EVT_COMBOBOX, onSelectCombobox)
             combobox2.Bind(wx.EVT_COMBOBOX, onSelectCombobox2)

    et quand je mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      def onSelectCombobox2(evt) :
             selection = evt.GetString()
             print('Sélection combobox2 :', selection)
             combobox = wx.ComboBox(rightpanel, choices=lst(choices))
             combobox2 = wx.ComboBox(rightpanel)
             combobox_sizer = wx.BoxSizer(wx.HORIZONTAL)
             combobox_sizer.Add(combobox)
             combobox_sizer.Add(combobox2)
             pan2.SetSizer(combobox_sizer)
      combobox.Bind(wx.EVT_COMBOBOX, onSelectCombobox)
      combobox2.Bind(wx.EVT_COMBOBOX, onSelectCombobox2)
    affiche message d erreur que combobox pas defini !!!

    je m'excuse pour ce dérangement

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Points : 28
    Points
    28
    Par défaut
    en faite c'etai pas un combobox dans un autre mais plus un combobox et apres on click droit et comme un menu contextuel dès que je click droit sur visible dans combobox il s affiche un menu contextuel avec les choix des visible et aussi meme chose pour l infrarouge et simulation

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Points : 28
    Points
    28
    Par défaut
    est ce que ç votre avis je peux créer un menu mieux dans chaque fenetre un menu avec les fenetre et chaque fenetre apres j clique et il me sors le choix ? ou je peux créer un context menu quand j click droit ?


    merci d'avance

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    j'ai trouvé une petite solution même si c'est pas vraiment ce que j'aimerai faire mais pour l'instant ça me va comme solution

    merci

  13. #13
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Récupère la version que tu as de wx en utilisant.

    Puis rends-toi ici, , puis entre dans le répertoire de cette url correspondant à ta version, télécharge le fichier demo, wxPython-demo-x.x.x.tar.gz , extrais-le, puis exécute le fichier demo.py contenu dans le répertoire demo comme indiqué dans le readme.

    Ainsi, tu pourras visualiser en quelques clics, le widget pouvant convenir à ce que tu cherches à faire. Tu verras un ComboTreeBox qui est peut-être ce que tu désires obtenir, alors tu pourras visualiser le code source du script et modifier en temps réel.

    Si tu n'as pas d'extracteur d'archives supportant tar.gz, 7Zip est un bon choix.
    Le temps ronge l'amour comme l'acide.

  14. #14
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Points : 28
    Points
    28
    Par défaut
    Salut,

    je vais faire ça sur mon pc quand je rentre, sinon merci pour l'aide j'ai une question la solution que vous m'avez donnée c'était comment le résultat ? C'était un sort de menu parce que la solution que j'ai fait c'est juste deux combobox une à coté de l'autre quand on change dans le 1er il change le 2em mais c'est pas ce que j'ai voulu ce que j'aimerais faire un sort de clic droit sur visible par exemple et après apparaît un menu avec tout liste de visible et même pour les autres.

    pour la version j'ai wxPython4 pour Python 3.6

  15. #15
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par loula05 Voir le message
    ... ce que j'aimerai faire un sort de click droit sur visible par exemple et apres apparait un menu avec tt liste de visible et même pour les autres .
    Bah dans ce cas, fais autant de combobox qu'il y a de choix à sélectionner, mais comme je comprends à moitié ce que tu racontes, pas certain que ce soit ça que tu désires, tu pourras te faire une idée avec la démo de wx.

    Citation Envoyé par loula05 Voir le message
    pour la version j'ai wxpython 4 pour python 3.6
    Cela paraît évident pour la version de wx, mais le print de la version indiquera justement quelle version de la 4.
    Le temps ronge l'amour comme l'acide.

  16. #16
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Points : 28
    Points
    28
    Par défaut
    > wx.version()
    '4.0.4 msw (phoenix) wxWidgets 3.0.5'

    voilà ma version de wxpython

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. [VBA-E] [Débutant] selection dans une combobox
    Par Jerez62 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 07/01/2007, 20h23
  3. Remplir un formulaire après la selection dans un combobox
    Par creale10 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/09/2006, 10h51
  4. Réponses: 4
    Dernier message: 10/05/2006, 10h50
  5. [C#] Selection dans une comboBox
    Par ShinS16 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 03/01/2006, 01h58

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