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

Tkinter Python Discussion :

Alimentation d'une combobox [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2017
    Messages : 66
    Points : 54
    Points
    54
    Par défaut Alimentation d'une combobox
    Bonjour,

    Je vais essayer d'être clair ^^. Dans une interface graphique j'ai une combobox que je veux alimenter avec les intitulés de sous dossiers se trouvant dans un dossier contenant des drivers cela fonctionne sans problème. Par contre quand j'essaye d'alimenter cette combo en fonction du type d'os

    ex os 64bits path .\Drivers\X64 sinon si os 32bits path .\Divers\X86, cela ne fonctionne pas je ne sais pas si je dois mettre toute ma combobox dans la fonction retournant le type d'os, ou si je dois recupérer dans une variable le type d'os et le renvoyer vers le prog principal.


    Code python : 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
    def ping2(event):
     
     
        for printer in c.Win32_Printer():
           txt.insert(END, '%s\n'%(printer.Caption))
        txt.config(state=DISABLED)
        for winos in c.Win32_OperatingSystem(): #retourne le type d'os
           labelos=Label(fenetre, text= winos.osarchitecture, font=fontgras).place(x=290,y=70)
           return labelos  
     
    labelos=StringVar()
    if labelos=="64_bits":
      contenu=os.listdir("./drivers/X64") #liste le contenu du dossier
    else :
        contenu=os.listdir("./drivers/X86")
    """contenu=os.listdir("./drivers/X64") #liste le contenu du dossier"""
    fenetre.tk.eval('package require Tix')
    varcombo = tix.StringVar()
    combo = tix.ComboBox(fenetre, editable=1, dropdown=1, variable=varcombo)
    combo.entry.config(state='readonly')  ## met la zone de texte en lecture seule
    for x in range(len(contenu)):
       combo.insert(x, contenu[x])
    combo.place(x=40, y=150)


    Merci.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 292
    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 292
    Points : 36 788
    Points
    36 788
    Par défaut
    Salut,

    Citation Envoyé par riko60 Voir le message
    Par contre quand j'essaye d'alimenter cette combo en fonction du type d'os

    ex os 64bits path .\Drivers\X64 sinon si os 32bits path .\Divers\X86, cela ne fonctionne pas
    La combobox se contente d'afficher le contenu de la liste de chaînes de caractères que vous lui donnez via "contenu".
    Donc "print (contenu)" devrait vous indiquer si vous avez bien récupéré les informations souhaitées. Sinon, c'est que le problème est ailleurs.

    Vu votre code, je vous recommande d'ouvrir un tuto sur tkinter car un callback tel que ping2 n'étant pas appelé depuis votre code, çà ne sert à rien de lui faire retourner quelque chose.

    - W

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2017
    Messages : 66
    Points : 54
    Points
    54
    Par défaut
    merci pour votre réponse. Comme je commence en prog je suis un peu perdu. Effectivement je n'appelle pas ma fonction dans le code mais je pensais qu'en créant une variable globale ou autre je pourrais récupérer le résultat de cette variable dans mon code principal. En faisant typeos=winos.osarchitecture puis print(typeos) je récupère bien le résultat souhaité ex 64 bits dans ma fonction. Mais dans mon code comme typeos n'est pas déclaré j'ai une erreur variable non définie (logique) si je l'initialise en typeos=StringVar() le résultat sera none (encore logique) puisque le résultat de la fonction n'est pas repris . Pour info ma fonction ping vérifie si une station de travail est bien en ligne, et son type d'os, ensuite en découle la liste des drivers chargés dans la combo... D'ou le fait de vouloir récupérer le typeos depuis cette fonction pour la réinjecter dans le code mais sans rappeler la fonction. Bref c'est peut être bancal et pas faisable dans ce sens.
    je vais regarder ce qu'est un callback et revient un peu plus tard.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 292
    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 292
    Points : 36 788
    Points
    36 788
    Par défaut
    Citation Envoyé par riko60 Voir le message
    merci pour votre réponse. Comme je commence en prog je suis un peu perdu.
    Si vous vous lancez dans la programmation événementielle, pour débuter, effectivement c'est raide... Mais vous avez plein de tutos à potasser pour apprendre les bases avant de vous jeter à l'eau. C'est un travail, çà prend du temps mais "apprendre" n'est pas quelque chose qu'on peut faire à votre place. On peut juste vous aider à mieux saisir ce que vous avez essayé de comprendre.

    - W

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2017
    Messages : 66
    Points : 54
    Points
    54
    Par défaut
    Merci j'ai l'impression qu' a force de chercher je mettais égaré. C'est peut être pas la solution la plus esthétique mais cela fonctionne en exécutant de nouveau for winos in c.Win32_OperatingSystem(): dans mon code. Vous avez évoqué les print et effectivement c'est une évidence pour voir ou ça "coince". Concernant les callback en fait je sais ce que c'est mais je ne connais pas le nom, j'ai encore un déficite de vocabulaire prog.

    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
    c = wmi.WMI()
    for winos in c.Win32_OperatingSystem(): #retourne le type d'os
       typeos=winos.osarchitecture
       print(typeos)   
     
    if typeos=="64 bits":
      contenu=os.listdir("./drivers/X64") #liste le contenu du dossier
    else :
        contenu=os.listdir("./drivers/X86")
    print(contenu)    
    fenetre.tk.eval('package require Tix')
    varcombo = tix.StringVar() 
    combo = tix.ComboBox(fenetre, editable=1, dropdown=1, variable=varcombo)
    combo.entry.config(state='readonly')  ## met la zone de texte en lecture seule
    for x in range(len(contenu)):
       combo.insert(x, contenu[x])
    combo.place(x=40, y=150)

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

Discussions similaires

  1. Alimentation d'une Combobox
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/10/2017, 06h43
  2. [A-03] Comment alimenter une combobox avec plusieurs tables
    Par MichaSarah dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/01/2009, 11h02
  3. Réponses: 3
    Dernier message: 16/09/2008, 17h08
  4. Alimentation d'un ComboBox via une requête paramètrée par un autre ComboBox
    Par Platinium_Phoenix dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 30/06/2008, 09h56
  5. données alimentant une combobox
    Par Taillise dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/04/2008, 09h56

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