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 :

SQLITE TKINTER : afficher des données triées après sélection dans une liste déroulante ComboBox [Python 3.X]


Sujet :

Python

  1. #1
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut SQLITE TKINTER : afficher des données triées après sélection dans une liste déroulante ComboBox
    Bonjour,

    Je souhaite pouvoir Extraire des données suite à une sélection au moyen d'un combobox.

    En d'autres termes voici ma requête SQL j'arrive à réaliser avec le code SQL ci-dessous et le code python ci-après :
    Je veux extraire tous les numéros de discours qui ont été réalisés à Paris. Ca OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT * FROM tb_discours WHERE ville
    Maintenant je veux extraire tous les numéros discours qui ont été réalisés à Paris, mais triés dans l'ordre croissant.
    Mais je ne comprend pas comment arriver à faire cela en Python en utilisant TKINTER.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT * FROM tb_discours WHERE ville ="Paris" ORDER by numdiscours

    Voici mon code PYTHON
    ma liste déroulante récupère la Ville dans la table tb_discours
    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
    # function callback
    def callback_villeRch(event):
        global rsltcmb_villeRch
        rsltcmb_villeRch = cmb_villeRch.get()
    
    
    # Authors drop-down list function
    def cmb_villeRch():
        """ Fonction liste déroulante """
    connexion = sqlite3.connect('mnesis.db')
        cursor = connexion.cursor()
        cursor.execute('SELECT DISTINCT ville FROM tb_discours ORDER BY ville')
        data = []
        for row in cursor.fetchall():
            data.append(row[0])
        return data

    Ensuite l'affichage, mais les numéros de discours ne sont pas triés dans un ordre croissant, comment faire ?
    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
    """ Retourne les valeurs des enregistrements de la base de données """
    connexion = sqlite3.connect('mnesis.db')
    cursor = connexion.cursor()
    # La recherche doit correspondre à la selection de la liste déroulante
    cursor.execute('SELECT * FROM tb_discours WHERE ville=?', (rsltcmb_villeRch,))
    results = cursor.fetchall()
    print_results = ''
    for row in results:
        print_results += "N° Discours : " + str(row[3]) + "\n" + "Date : " + str(row[2]) + "\n" + "Messages : " + "\n" + str(row[4]) + \
                         "\n" + "-----------------------------------------" + "\n"
    
    # Label ---------------------
    ville_label = Label(tpl_rslt, text=str(row[1]), padx=10, pady=5, bg="Snow3", fg="#272727", font="Calibri 22 bold")
    ville_label.pack()
    # Insert zone de texte
    zonetext = ScrolledText(tpl_rslt, width=135, height=30, padx=10, pady=1, wrap='word', font="Calibri 12")
    zonetext.pack()
    zonetext.insert("0.0", print_results)
    Merci beaucoup par avance pour votre expertise.

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

    Côté SQL vous avez ORDER BY......
    Et côté Python, trier, c'est "sort"..

    - W

  3. #3
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut
    Merci je regarde

  4. #4
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut
    Après lecture de l'article concernant "sort", voici mon code avec les lignes 8 et 1o modifiées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    """ Retourne les valeurs des enregistrements de la base de données """
    connexion = sqlite3.connect('mnesis.db')
    cursor = connexion.cursor()
    # La recherche doit correspondre à la selection de la liste déroulante
    cursor.execute('SELECT * FROM tb_discours WHERE ville=?', (rsltcmb_villeRch,))
    results = cursor.fetchall()
    print_results = ''
    print_results2 = sorted(print_results, key=lambda numdiscours: numdiscours[3])
    for row in results:
        print_results2 += "N° Discours : " + str(row[3]) + "\n" + "Date : " + str(row[2]) + "\n" + "Métaphores : " + "\n" + str(row[4]) + \
                         "\n" + "-----------------------------------------" + "\n"
    Donc je n'ai pas de message d'erreur, par contre rien ne s'affiche dans mon formulaire de données.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 323
    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 323
    Points : 36 837
    Points
    36 837
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    Donc je n'ai pas de message d'erreur, par contre rien ne s'affiche dans mon formulaire de données.
    Relisez votre code et ajoutez des affichages de variables/"print" pour vous assurer que chaque étape fait bien ce que vous espérez.

    - W

  6. #6
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut
    Merci, c'est ce que j'ai fait et voici le résultat dans la console pour ce print.
    .
    Résultat :
    ['N', '°', ' ', 'D', 'i', 's', 'c', 'o', 'u', 'r', 's', ' ', ':', ' ', '0', '2', '0', '-', 'L', 'e', ' ', 'm', 'o', 'm', 'e', 'n', 't', ' ', 'e', 's', 't', '-', 'i', 'l', ['N', '°', ' ', 'D', 'i', 's', 'c', 'o', 'u', 'r', 's', ' ', ':', ' ', '0', '5, '4', '-', 'L', 'e', ' ', 'L', 'o', 'n', 'g', 'n', 't', ' ', 'e', 's', 't',....]
    Donc les données passent bien mais ce n'est pas ça... Le tri ne se fait pas car j'ai le N° 20 et ensuite le 54 et ensuite le 44.
    Il me manque une clé de compréhension et j'ai beau relire la doc je ne vois pas.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 323
    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 323
    Points : 36 837
    Points
    36 837
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    Il me manque une clé de compréhension et j'ai beau relire la doc je ne vois pas.
    Ce n'est pas la documentation qu'il faut relire mais votre code!

    Tout est dans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    print_results = ''
    print_results2 = sorted(print_results,...)
    for row in results:
        print_results2 += ...
    - W

  8. #8
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut Format non désiré et pas de tri croissant
    Bonjour,
    Oui vous aviez raison, voici mon code corrigé et j'ai donc bien une sortie des données dans mon formulaire.

    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
    """ Retourne les valeurs des enregistrements de la base de données """
    connexion = sqlite3.connect('mnesis.db')
    cursor = connexion.cursor()
    # La recherche doit correspondre à la selection de la liste déroulante
    cursor.execute('SELECT * FROM tb_discours WHERE ville=?', (rsltcmb_villeRch,))
    results = cursor.fetchall()
    print_results = ''
    print_results = sorted(print_results, key=lambda numdiscours: numdiscours[3])
    for row in results:
        print_results += "N° Discours : " + str(row[3]) + "\n" + "Date : " + str(row[2]) + "\n" + "Messages : " + "\n" + str(row[4]) + \
                         "\n" + "-----------------------------------------" + "\n"
    
    print(print_results)# pour test
    
    # Label ---------------------
    auteur_label = Label(tpl_rslt, text=str(row[1]), padx=10, pady=5, bg="Snow3", fg="#272727", font="Calibri 22 bold")
    auteur_label.pack()
    # Insert zone de texte
    zonetext = ScrolledText(tpl_rslt, width=135, height=30, padx=10, pady=1, wrap='word', font="Calibri 12")
    zonetext.pack()
    zonetext.insert("0.0", print_results)
    Mais le tri ne se fait pas sur les numéros de discours et le format de sortie, n'est pas celui que je souhaite.
    La police du formulaire n'est plus respectée et il y a des insertions {} à la place des espaces et du début et fin des lignes.
    Voir ci-dessous un extrait :

    N ° { } D i s c o u r s { } : { } 0 2 0 - L e { } m o m e n t { } e s t - i l { } v e n u { } p o u r { } {
    } D a t e { } : { } 2 0 2 0 / 0 1 / 2 6 {
    } Messages { } : { } {
    } - { } F e u i l l e { } d e { } p a p i e r { } f r o i s s é {
    } - { } T a i l l e { } d e s { } p l a n è t e s { } {

    } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {
    } N ° { } D i s c o u r s { } : { } 0 54 - B â t i s s e z { } v o t r e { } propre { } destinée { } {
    } D a t e { } : { } 2 0 2 0 / 0 6 / 1 4 {
    } Messsages { } : { } {
    } E x e m p l e { } 1 { } : { } L a { } f o r ê t { } - { } S c i e n c e { } Recherche {

    } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {
    } N ° { } D i s c o u r s { } : { } 0 4 4 - C h e r c h o n s { } s a n s { } c e s s e { } l e { } moyen { } d e { } .... {
    } D a t e { } : { } 2 0 2 0 / 0 9 / 2 7 {
    } M esagges { } : { } {
    } I m a g i n e z { } l e s { } j e u n e s { } : {
    }

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

    Citation Envoyé par lagratteCchouette Voir le message
    Mais le tri ne se fait pas sur les numéros de discours et le format de sortie, n'est pas celui que je souhaite.
    ...il y a des insertions {} à la place des espaces et du début et fin des lignes.
    Il faudrait désembuer votre cerveau.

    Si je vous propose de relire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    print_results = ''
    print_results2 = sorted(print_results,...)
    for row in results:
        print_results2 += ...
    vous pouvez le faire à haute voix:

    • ligne 1: assigner la chaine vide à print_results
    • ligne 2: trier print_results (la chaine vide) et assigner le résultat à print_results2
    • ligne 3: faire une boucle sur le resultat (non trié) de la requête pour ajouter des (listes de) chaines de caractères à print_results2.


    Python se contente d'exécuter les instructions que vous lui avez demandé d’exécuter. Et si en relisant à haute voix, vous ne vous rendez pas compte que avez écrit n'importe quoi...

    - W

  10. #10
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut
    Bien merci quand pour le temps que vous me consacrez.
    Ok je comprends ce que vous vouliez me dire au concernant le déroulement logique.

    Voici mon code, mais que j'l'indent "print_results2" là ou dans la boucle cela ne change rien.

    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
    """ Retourne les valeurs des enregistrements de la base de données """
    connexion = sqlite3.connect('mnesis.db')
    cursor = connexion.cursor()
    # La recherche doit correspondre à la selection de la liste déroulante
    cursor.execute('SELECT * FROM tb_discours WHERE ville=?', (rsltcmb_villeRch,))
    results = cursor.fetchall()
    print_results = ''
    for row in results:
        print_results += "N° Discours : " + str(row[3]) + "\n" + "Date : " + str(row[2]) + "\n" + "Messages : " + "\n" + str(row[4]) + \
                         "\n" + "-----------------------------------------" + "\n"
    print_results2 = sorted(print_results, key=lambda numdiscours: numdiscours[3])
    
    print(print_results)
    print(print_results2)
    
    # Label ---------------------
    auteur_label = Label(tpl_rslt, text=str(row[1]), padx=10, pady=5, bg="Snow3", fg="#272727", font="Calibri 22 bold")
    auteur_label.pack()
    # Insert zone de texte
    zonetext = ScrolledText(tpl_rslt, width=135, height=30, padx=10, pady=1, wrap='word', font="Calibri 12")
    zonetext.pack()
    zonetext.insert("0.0", print_results2)
    J'ai ce message d'erreur :

    print_results2 = sorted(print_results, key=lambda numdiscours: numdiscours[3])
    IndexError: string index out of range

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 323
    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 323
    Points : 36 837
    Points
    36 837
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    Ok je comprends ce que vous vouliez me dire au concernant le déroulement logique.
    Ce que vous devez comprendre, c'est:
    1. je veux faire quoi? Trier les résultats de la requête.
    2. ces résultats étant dans results, je trie results.

    Lorsque vous relisez votre code, vous devez y retrouver cette intention (le je veux faire quoi)... sinon, c'est pas la peine de demander pourquoi çà ne marche pas.

    Et si ce genre de logique est trop compliquée, arrêter de d'essayer de programmer... faites coder votre truc par quelqu'un qui sait.

    - W

  12. #12
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut
    Merci de votre retour.
    J'explique mieux mon souhait.

    Je sais coder et trouver par exemple en sélectionnant un auteur au moyen d'une liste déroulante extraire toutes les citations de cet auteur et là l'ordre n'a pas d'importance.
    Ma requête sql et mon code python est : cursor.execute('SELECT * FROM tb_citation WHERE auteur=?', (rsltcmb_auteur,))

    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
    """ Retourne les valeurs des enregistrements de la base de données """
    connexion = sqlite3.connect('mnesis.db')
    cursor = connexion.cursor()
    cursor.execute('SELECT * FROM tb_citation WHERE auteur=?', (rsltcmb_auteur,))
    rslts = cursor.fetchall()
    print_results = ''
    for row in results:
        print_results += " Citation :  " + str(row[3]) + "     " + str(row[4]) + \
                         "-----------------------------------------------------------------------------"+"\n"
    # Attention "fg" est la couleur du fond de l'item recherché (auteur, thème...)
    auteur_label = Label(tpl_rslt, text=str(row[1]), padx=10, pady=5, bg="Snow3", fg="#272727", font="Calibri 22 bold")
    auteur_label.pack()
    # Insert et configuration de la fonction
    zonetext = ScrolledText(tpl_rslt, width=135, height=30, padx=10, pady=1, wrap='word', font="Calibri 12")
    zonetext.pack()
    zonetext.insert("0.0", print_results)
    Mais maintenant je veux pouvoir trier l'ordre pour avoir un affichage croissant dans ma tb_discours.
    Mon formulaire 1 contient une liste déroulante dans laquelle s'affiche toutes les "ville" et en sélectionnant une "ville" je veux pouvoir dans cette ville trouver tous les discours numérotés qui ont été prononcés dans cette "ville".
    Un fois la ville sélectionnée, je souhaite que ma requête/code tri dans cette ville les discours dans un ordre croissant par numéro (le dit numéro est constitué a un type texte avec cette structure "020-Discours bla bla").

    Ma requête SQL brut est : SELECT * FROM tb_discours WHERE ville ="Paris" ORDER by numdiscours

    Ce que je souhaite donc écrire en python, je cherche a atteindre cette finalité et j'ai lu et relu la documentation. mais... pourquoi ne pas m'expliquer ?

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 323
    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 323
    Points : 36 837
    Points
    36 837
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    mais... pourquoi ne pas m'expliquer?

    Vous voulez trier une liste bien précise et vous en triez une autre.
    Résultat: la liste que vous vouliez trier ne sera pas pas plus triée.

    Que voulez vous que je vous explique de plus?

    - W

  14. #14
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut Remerciements
    Merci beaucoup pour ce retour, mais je n'abandonne jamais.
    Mais dans mon code en tenant compte de vos remarques, voilà la logique que je pense avoir appliqué et c'est pour cela que je ne vois pas bien ce que vous me dites.


    • ligne 1: assigner la chaine vide à print_results
    • Ligne 2 : faire une boucle et récupérer les données
    • ligne 3: assigner le résultat à print_results2 et trier sur numdiscours


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    print_results = ''
    for row in results:
        print_results += "N° Discours : " + str(row[3]) + "\n" + "Date : " + str(row[2]) + "\n" + "Messages : " + "\n" + str(row[4]) + \
                         "\n" + "-----------------------------------------" + "\n"
    print_results2 = sorted(print_results, key=lambda numdiscours: numdiscours[3])

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 323
    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 323
    Points : 36 837
    Points
    36 837
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    Mais dans mon code en tenant compte de vos remarques, voilà la logique que je pense avoir appliqué et c'est pour cela que je ne vois pas bien ce que vous me dites.
    Si vous aviez regardé le contenu de results, vous auriez constaté que c'est un tableau à 2 dimensions. On peut le trier en fonction d'une colonne donnée et si numdiscours est à la 3ème colonne, le "sort" pourrait fonctionner.

    Par contre sorted(print_results, key=lambda numdiscours: numdiscours[3]), plante car print_results est une chaine de caractères.
    Le key=... plante en indexerror.

    Après si vous voulez faire marcher un truc qui ne peut pas fonctionner, vous pouvez perseverer autant que vous voulez.

    Tant que vous ne prenez pas le temps de comprendre pourquoi çà ne marche pas (ou les explications qu'on vous donne, ni les messages d'erreur de Python), vous n'aurez aucune chance d'avancer....

    Mais vous pouvez essayer encore.

    - W

  16. #16
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut
    @wiztricks
    Merci pour votre retour, mais vous pouvez m'aider sans me mépriser, ni me rabaisser !!

    En tout cas la vraie piste pour répondre à ma demande qui pourtant était claire est celle-ci.
    Ce n'est pas sort() ou sorted(). Mais simplement un placement de la recherche au bon endroit dans la requête SQL dans python.

    Je résume :
    Pour arriver à trier mon résultat en selon cette requête SQL brut : SELECT * FROM tb_discours WHERE ville ="Paris" ORDER by numdiscours
    Je l'avais écris comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    
    # La recherche doit correspondre à la selection de la liste déroulante "rsltcmb_villeRch"
    cursor.execute('SELECT * FROM tb_discours WHERE ville ORDER by numdiscours=?', (rsltcmb_villeRch,))
    Mais pour que cela marche et que python exécute cette precédure :
    1. Sélectionner tous les enregistrements de la tb_discours
    2. Qui correspondent à la ville sélectionnée dans la liste déroulante rsltcmb_villeRch
    3. Mais triés dans l'ordre ascendant des numdiscours

    Voici donc le code, il suffisait de placer le ORDER by numdiscours après ville=?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # La recherche doit correspondre à la selection de la liste déroulante
    cursor.execute('SELECT * FROM tb_discours WHERE ville=? ORDER by numdiscours', (rsltcmb_villeRch,))
    Donc voici mon code dans sa globalité :
    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
    # function callback
    def callback_villeRch(event):
        global rsltcmb_villeRch
        rsltcmb_villeRch = cmb_villeRch.get()
    
    
    # Authors drop-down list function
    def cmb_villeRch():
        """ Fonction liste déroulante """
    connexion = sqlite3.connect('mnesis.db')
        cursor = connexion.cursor()
        cursor.execute('SELECT DISTINCT ville FROM tb_discours ORDER BY ville')
        data = []
        for row in cursor.fetchall():
            data.append(row[0])
        return data
    
    
    # View window for citations searches by city ------------------------------------------------
    def rslt_forville(print_results2=None):
        """ Fenêtre de visualisation des recherches """
        # ---
    tpl_rslt = Toplevel()
        tpl_rslt.title(" Extraction des données ")
        screen_x = int(tpl_rslt.winfo_screenwidth())
        screen_y = int(tpl_rslt.winfo_screenheight())
        tpl_rslt_x = 1180
    tpl_rslt_y = 700
    pos_x = (screen_x // 2) - (tpl_rslt_x // 2)
        pos_y = (screen_y // 2) - (tpl_rslt_y // 2)
        geo = "{}x{}+{}+{}".format(tpl_rslt_x, tpl_rslt_y, pos_x, pos_y)
        tpl_rslt.geometry(geo)
        tpl_rslt.resizable(width=False, height=False)
        tpl_rslt.configure(bg='snow3')
        zonetext = tk.Text()
    
        """ Retourne les valeurs des enregistrements de la base de données """
    connexion = sqlite3.connect('mnesis.db')
        cursor = connexion.cursor()
        # La recherche doit correspondre à la selection de la liste déroulante
    cursor.execute('SELECT * FROM tb_discours WHERE ville=? ORDER by numdiscours', (rsltcmb_villeRch,))
        results = cursor.fetchall()
        print_results = ''
    for row in results:
            print_results += "N° Discours : " + str(row[3]) + "\n" + "Date : " + str(row[2]) + "\n" + "Messages : " + "\n" + str(row[4]) + \
                             "\n" + "-----------------------------------------" + "\n"
    # Label ---------------------
    auteur_label = Label(tpl_rslt, text=str(row[1]), padx=10, pady=5, bg="Snow3", fg="#272727", font="Calibri 22 bold")
        auteur_label.pack()
        # Insert zone de texte
    zonetext = ScrolledText(tpl_rslt, width=135, height=30, padx=10, pady=1, wrap='word', font="Calibri 12")
        zonetext.pack()
        zonetext.insert("0.0", print_results)
    
        # end of the loop ---
    tpl_rslt.mainloop()
    
        # Close connection
    connexion.close()

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 323
    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 323
    Points : 36 837
    Points
    36 837
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    En tout cas la vraie piste pour répondre à ma demande qui pourtant était claire est celle-ci.
    Ce n'est pas sort() ou sorted(). Mais simplement un placement de la recherche au bon endroit dans la requête SQL dans python.
    Cette piste vous a été donnée dans la première réponse.

    C'est vous qui avez choisi de partir sur sort en vous obstinant à trier une chaine vide...

    Citation Envoyé par lagratteCchouette Voir le message
    @wiztricks
    Merci pour votre retour, mais vous pouvez m'aider sans me mépriser, ni me rabaisser !!
    A partir du moment ou vous écrivez n'importe quoi sans vouloir comprendre pourquoi çà ne peut pas marcher et qu'en plus vous insistez, vous ne laissez pas trop de choix.

    - W

  18. #18
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut
    Un rôle de conseil est plus appréciable qu'un esprit de jugement.

  19. #19
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 323
    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 323
    Points : 36 837
    Points
    36 837
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    Un rôle de conseil est plus appréciable qu'un esprit de jugement.
    Et les entendre plutôt que de perséverer à en faire n'importe quoi est encore plus appréciable.

    - W

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

Discussions similaires

  1. [XL-2013] Filtrage des données selon un choix dans une liste déroulante
    Par mo56go dans le forum Excel
    Réponses: 3
    Dernier message: 03/10/2017, 17h04
  2. [WD20E] Besoin d'aide pour afficher des données de l'arbre dans une table
    Par Guillaume Philippe dans le forum WinDev
    Réponses: 0
    Dernier message: 30/06/2016, 14h25
  3. Réponses: 12
    Dernier message: 19/06/2014, 11h28
  4. Réponses: 4
    Dernier message: 22/06/2009, 12h12
  5. [ODBC] Garder une saisie après sélection dans une liste déroulante
    Par nawak.seb dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 27/08/2008, 14h48

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