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 :

Python et tkinter


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2021
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2021
    Messages : 44
    Par défaut Python et tkinter
    Bonjour,

    Grand débutant avec Python, je coince avec une question pratique.

    1. Mon objectif est de faire un tirage au sort dans une liste de nom. Lorsque j'effectue plusieurs tirages j'insère un mot tous les n tirage. Je définis la fréquence d'insertion par input. Tout fonctionne

    2. Eternel insatisfait, je me dit que j'aimerais bien avoir une version plus graphique en utilisant tkinter. Je rame un peu mais finalement j'arrive à créer une entrée, récupérer l'entrée et la convertir en int avec la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def frequence():
        n = frequence.get()
        showinfo('Info',n)
        a = int(n)
    Cette fonction est associée à entry et un bouton de validation qui lance la fonction. Si je ne me trompe pas n est un IntVar et a un Int

    3. Mon problème comment extraire et envoyer cet entier "a" au premier fichier python afin d'éviter de passer par input. En gros de façon générale, si j'ai une entrée via entry comment la réutiliser dans un autre fichier comme une simple variable int ?

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

    Pourquoi ne pas mettre tous dans le même script ?

    Sinon il faudra peut-être importer l'un ou l'autre des scripts comme un module.

    Ou alors passer par un système de transfert de données que je ne maitrise pas du tout (pipe, socket, ... ?) mais à mon avis on est plus dans le problème XY à ce stade...

  3. #3
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2021
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2021
    Messages : 44
    Par défaut
    Bonjour,

    Si je ne trouve rien, je vais probablement tout metter dans le même script car il n'est pas très long.

    Je voulais simplement quelque chose de plus propre mais aussi par curiosité car si mon script avait été plus long, ça aurait été compliqué de tout garder dans le même fichier.

    J'attends d'autres réponses au cas où, mais sinon, je ferai un seul script…qui risque au final d'être assez long car je l'étaye à chaque nouvelle idée.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 753
    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 753
    Par défaut
    Salut,

    Citation Envoyé par Apoptose Voir le message
    En gros de façon générale, si j'ai une entrée via entry comment la réutiliser dans un autre fichier comme une simple variable int ?
    Si une fonction dans un script saisi un entier, pour qu'il soit accessible à l'extérieur de la fonction, il faudra que la fonction retourne l'entier à l'appelant de la fonction.

    Et que la fonction soit appelée depuis le même script ou pas ne changera rien.

    Avec tkinter les choses se compliquent puisqu'on va lire l'Entry une fois la saisie terminée signalée par un évènement (clic sur un Button) qui provoque l'appel d'un callback. Cette fonction là n'est pas appelée depuis le programme mais par tkinter.

    Impossible de récupérer son retour!
    Les solutions seront du côté variables globales/classes/... et demandent de savoir un peu plus programmer que le débutant qui débute (et passer du temps dans les tutos).

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

  5. #5
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2021
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2021
    Messages : 44
    Par défaut
    Merci pour ces infos…j'avais bien constaté qu'il ne m'était pas possible de récupérer la donnée.

    Donc si je veux que cela fonctionne :
    - soit j'utilise mon programme dans une console python et tant pis pour l'esthétique
    - soit j'intègre mon programme à une fonction pour que tout soit fait au clic-button
    - soit je me mets aux variables et aux classes. J'ai déjà commencé mais c'est un gros morceau, je vais devoir réfléchir au ration temps investissement / utilité car ce n'est un programme de folie non plus.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 753
    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 753
    Par défaut
    Salut,

    Vous n'avez pas besoin de créer des classes ou de savoir programmer orienté objet pour faire de petits programmes avec tkinter. Par contre, les variables et leur portée sont des bases qu'on apprend avec les fonctions (sans tkinter mais utiles lorsqu'on s'y colle).

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

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Je ne comprends pas, on peut récupérer la valeur d'une Entry assez facilement pourtant !

    Tu peux essayer ce script si tu veux :
    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
    import threading
    from tkinter import *
     
    def send_entry():
        l.configure(text=e.get(),fg=['red','green'][len(e.get())%2!=0])
        print("L'entrée contient :",e.get())
     
    def get_entry(event):
        threading.Thread(target=send_entry).start()    
     
    win = Tk()
    e = Entry(win)
    e.bind("<Key>",get_entry)
    e.pack()
    l = Label(win,fg="red")
    l.pack()
    win.mainloop()
    J'ai rajouté quelques fioritures, le threading permet à l'Entry de créer un petit embranchement qui donne le temps nécessaire au widget de créer la variable de stockage de l'Entry, sinon le binding appelle la fonction avant que la variable n'est eu le temps de se créer ou de se mettre à jour ce qui donne l'impression que le Label à un train de retard (je te laisse tester sans le threading). Et pi je me suis amusé à changer la couleur du Label pour le fun...

    Wiz me corrigera si nécessaire !

    Edit : En faite il y a moyen de faire sans le threading :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from tkinter import *
     
    def get_entry(event):
        l.configure(text=e.get(),fg=['red','green'][len(e.get())%2!=0])
     
    win = Tk()
    e = Entry(win)
    win.bind("<Key>",get_entry)
    e.pack()
    l = Label(win,fg="red")
    l.pack()
    win.mainloop()
    Dernière modification par Invité ; 12/08/2021 à 22h45.

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 753
    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 753
    Par défaut
    Salut,

    Citation Envoyé par LeNarvalo Voir le message
    Wiz me corrigera si nécessaire !
    Relisez le post initial. Tout ce que vous montrez est déjà connu mais ça ne répond pas au 3ème point qui comporte la vraie (et immense) question du découpage d'un programme en modules et de leur communication entre eux.

    Pire, la glue à créer entre un module pensé/codé séquentiellement alors que l'autre est l'interface d'un GUI et donc évènementiel par nature.

    Quand on débute, les programmes sont "courts" et le plus simple sera de créer une mouture console (séquentielle) et une mouture GUI (évènementielle). Les codes seront séparés et indépendants.

    Puis lorsqu'on devra se coller à cet exercice plusieurs fois et que les programmes deviendront touffus, on essaiera de dégager des parties communes qu'on pourra partager via des modules.

    Puis lorsqu'on sera un peu plus à l'aise avec la POO, on regardera les différents patterns de conceptions qui permettent d'organiser ce genre de découpage de façon plus structurée.

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

Discussions similaires

  1. [Python 2.X] Icône dans un bouton sous python en Tkinter
    Par MisterPython dans le forum Tkinter
    Réponses: 0
    Dernier message: 10/12/2014, 12h09
  2. [QtGui] python: de tkinter(Arcgis 10.1) vers PYQT (Qgis 2.0)
    Par noramokh dans le forum PyQt
    Réponses: 5
    Dernier message: 18/06/2014, 12h52
  3. Stéganographie sur Python et Tkinter
    Par HobbitBourg dans le forum Tkinter
    Réponses: 1
    Dernier message: 09/05/2014, 09h00
  4. Projet ISN Planche de Galton Python/Pygame/Tkinter
    Par Mmemykon dans le forum Tkinter
    Réponses: 13
    Dernier message: 24/04/2014, 22h28
  5. Interface graphique avec python et tkinter
    Par MrTGR57 dans le forum Tkinter
    Réponses: 0
    Dernier message: 23/04/2014, 17h10

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