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

GUI Python Discussion :

Afficher données postgresql dans une combobox tkinter


Sujet :

GUI Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Afficher données postgresql dans une combobox tkinter
    Bonjour à tous,

    Je ne suis pas développeuse python mais j’apprends et je rencontre un obstacle pour arriver à afficher deux listes déroulante dans une deuxième fenêtre, qui vont appeler des données dans ma base postgres.
    1er obstacle: Dans la liste "Sélectionner un statut" j'aimerais parvenir à afficher les valeurs de statut "('En attente',), ('Traitée',), ('A présenter',), ('Abandonné',)" sans les accolades.
    En cliquant sur une valeur de la première liste j'obtient cette erreur python :

    Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Users\jean-Noel-11\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
    File "C:/github_repo/github_repo_batch/python/help.py", line 58, in getUpdateData
    AccountCombo['values'] = records_id_opp[CategoryCombo.get()]
    TypeError: list indices must be integers or slices, not str
    2ème obstacle: Je voudrais appeler la liste des id_opp en relation avec les différents statuts. Par exemple, lorsque l’utilisateur choisi le statut 'A présenter', la liste des id_opp possédant ce statut est appelé. Il s'agit de la requete "selectionner une opportunite".


    Voici mon code python.

    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
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    from tkinter import *
    import tkinter.ttk
    from tkinter import ttk
    import os
    import re
    import psycopg2
    import sys
    import pprint
     
    def callData():
    	#Define our connection string
    	conn_string = "host='localhost' dbname='db' user='postgres' password='secret'"
     
            # print the connection string we will use to connect
    	print ("Connecting to database")
     
    	# get a connection, if a connect cannot be made an exception will be raised here
    	conn = psycopg2.connect(conn_string)
     
            # get a connection, if a connect cannot be made an exception will be raised here
    	conn = psycopg2.connect(conn_string)
     
     
    def ListeChoix():
    #Define our connection string
        conn_string = "host='www.metis-reseaux.fr' dbname='l49' user='postgres' password='UhtS.1Hd2' port=5678"
        # print the connection string we will use to connect
        print ("Connecting to database")
     
        # get a connection, if a connect cannot be made an exception will be raised here
        conn = psycopg2.connect(conn_string)
        # get a connection, if a connect cannot be made an exception will be raised here
        conn = psycopg2.connect(conn_string)    
        # conn.cursor will return a cursor object, you can use this cursor to perform queries
        cursor = conn.cursor()
        # execute our Query (selectionner un statut)
        StatutList = ['En attente', 'Traitée', 'A présenter', 'Abandonné']
     
        sql = 'select * from (WITH list_statut AS (SELECT  statut FROM coordination.opportunite group by statut) SELECT   list_statut.statut AS list_statut FROM list_statut)o WHERE list_statut IN %(StatutList)s'
     
        cursor.execute(sql, {'StatutList': tuple(StatutList),})
        # retrieve the records from the database
        records_statut = cursor.fetchall()
        print(records_statut)
     
        # execute our Query (selectionner une opportunite)
        cursor.execute("WITH un_id_opp AS (SELECT  id_opp FROM coordination.opportunite where statut like 'A présenter' group by id_opp) SELECT array_agg(un_id_opp.id_opp) AS id_opp FROM un_id_opp")
        # retrieve the records from the database
        records_id_opp = cursor.fetchall()
        print(records_id_opp)
     
     
     
        def getUpdateData(event):
            print(CategoryCombo.get())
            AccountCombo['values'] = records_id_opp[CategoryCombo.get()]
     
        top=Toplevel(root) # créer la fenêtre (instancier)
        # Creation labels pour les combobox
        message = "Selectionner un statut"  #définir le texte de l'étiquette
        lab=Label(top, text=message).grid(row = 2,column = 1,padx = 2, pady=0) # définir l'étiquette
        message = "Selectionner une opportunité"  #définir le texte de l'étiquette
        labo=Label(top, text=message).grid(row = 4,column = 1,padx = 2, pady=0) # définir l'étiquette
        # Creation des combobox
        AccountCombo = tkinter.ttk.Combobox( top, width = 15)
        sqlData = callData    
        CategoryCombo = tkinter.ttk.Combobox(top,  values = records_statut)
        # Ajouter les combobox
        CategoryCombo.bind('<<ComboboxSelected>>', getUpdateData)
        CategoryCombo.grid(row = 3,column = 1,padx = 10,pady = 25)
        AccountCombo.grid(row = 5,column = 1,pady = 25,padx = 10)
     
     
     
     
     
    class App:
        def __init__(self, master):
            fm = Frame(master)
     
            Button(fm, text="Choisir dans la liste des opportunités à l\'étude",command=ListeChoix).pack(side=TOP, anchor=W, fill=X, expand=YES)
            fm.pack(fill=BOTH, expand=YES)
     
     
     
     
    root = Tk()
    root.option_add('*font', ('verdana', 12, 'bold'))
    root.title("Générateur de rapports - GUI")
    display = App(root)
    root.mainloop()

    Auriez vous des pistes de réflexion, améliorations, optimisation, ou des débuts de solutions à me proposer ?

    Merci d'avance pour votre aide!
    Images attachées Images attachées  

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

    Le message d'erreur TypeError: list indices must be integers or slices, not str vous signale que si records_id_opp est une liste alors, pour en récupérer un élément via son index, celui-ci doit être un entier... Et CategoryCombo.get() n'a aucune raison de vous retourner autre chose qu'une chaîne de caractères.

    Auriez vous des pistes de réflexion, améliorations, optimisation, ou des débuts de solutions à me proposer ?
    Avant d'utiliser un widgets dans votre application, çà serait bien de voir comment il fonctionne et s'assurer que vous l'avez bien compris en codant un petit exemple qui mime l'utilisation que vous souhaitez.
    Si vous ne vous en sortez pas, çà vous permettrait de poster un code qu'on pourra exécuter, mieux comprendre ce que vous raconter et vous aider sans trop perdre de temps.

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

Discussions similaires

  1. [AC-2007] Afficher des valeurs dans une combobox
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 1
    Dernier message: 16/06/2016, 14h33
  2. Afficher données TCD dans une userform
    Par Fraisesdesbois dans le forum Excel
    Réponses: 3
    Dernier message: 13/01/2015, 07h15
  3. Afficher données xml dans une liste
    Par aniki_takezo dans le forum ASP.NET
    Réponses: 5
    Dernier message: 07/08/2012, 22h37
  4. Afficher données dans une comboBox
    Par andy331 dans le forum C#
    Réponses: 1
    Dernier message: 01/06/2010, 09h25
  5. Garder la dernière donnée selectionnée dans une Combobox
    Par jacqaug dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/09/2008, 15h44

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