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 :

Adapter ma GUI à mon programme [Python 2.X]


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Adapter ma GUI à mon programme
    Bonjour, Je viens de creer mon premier "vrai" programme en python qui permet de rechercher des valeurs dans un dictionnaire, de les ecrire dans un fichier text puis de les lire a partrir de ce fichier
    Je voudrais le lier a une GUI afin d'avoir un programme 'complet'. J'ai donc créé ma GUI á cote de ce programme sans penser aux liens aui doivent lier mes deux bouts de code.

    Ce que je voudrais faire avec la GUI :

    1- Choisir une date et suivant le bouton (After ou Before) le stocker dans la variable timeBefore ou timeAfter.

    2- Selectionner une ville et la stocker variable stationPlace.

    3-Un bouton 'run', qui injecte les données récuperées dans le programme (dans la partie query) et lance ce dernier.

    4-Sauvegarder avec le bouton 'save as' les resultats de ma recherche grace a ma function writeIndex.

    Avez vous un point de depart pour m'aider a faire le lien entre les 2 parties?

    Voici mon code:

    MyProgram:

    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
    from datetime import datetime
     
        #dictonary with the information
    d={1: ('sun','Paris',datetime(2012,4,17,00,00)), 2: ('cloud','Londres',datetime(2012,6,24,00,00)), 3 : ('snow','NewYork',datetime(2012,8,8,00,00)),4 : ('sun','Tokyo',datetime(2012,11,30,00,00))}
        #List of string of d
    d_string=[('sun','Paris',str(datetime(2012,4,17,00,00))),('cloud','Londres',str(datetime(2012,6,24,00,00))),('snow','NewYork',str(datetime(2012,8,8,00,00))),('sun','Tokyo',str(datetime(2012,11,30,00,00)))]    
     
        #function to query d
    def queryD(timeAfter=datetime(1900,01,01,00,00), timeBefore=datetime(2500,01,01,00,00),place=None):
     
        if place == None:    
            answer = [[key,values] for key,values in d.items() if values[2]>timeAfter and values[2]<timeBefore]
     
        else:
            answer = [[key,values] for key,values in d.items() if values[2]>timeAfter and values[2]<timeBefore and values[1]==place]
        return answer     
     
        #function to write the results of queryD   
    def writeIndex():
     
            #open index.txt and give the right to write    
        myFile=open('output.txt', 'w')     
        for l in d_string:  
            myFile.writelines('\t'.join(l)+'\n')  
        myFile.close()
        return myFile
     
        #function to read the file output        
    def readIndex():
     
            #open index.txt and give the right to read
        with open('output.txt', 'r') as f:
            #return all the written informations in index.txt in a terminal
            return [myIndex.split('\t') for myIndex in f.readlines()]
    MyGUI :

    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
    from Tkinter import *
    from datetime import * 
     
     
    class App:
     
        def __init__(self, gui):
     
            gui = Frame(gui)
            gui.grid()
     
    #AFTER############################################################      
     
             #Create Text
            self.text = Label(gui, text="Put a date : ")
               #give to Text a place 
            self.text.grid(column=0,row=0)
     
               #Create an area to write text
            self.entry = Entry(gui)        
            self.entry.grid(column=1,row=0,sticky='EW')
            self.entry.insert(0, 'YYYY/MM/DD')
     
            self.entry.focus_set()
     
               #Create a button 
            self.buttonAfter = Button(gui,text=u'After', command=self.getAfter)
            self.buttonAfter.grid(column=2,row=0)                   
            self.buttonBefore = Button(gui,text=u"Before",command=self.getBefore)
            self.buttonBefore.grid(column=3,row=0)   
     
    #PLACE###########################################################       
            self.textStation = Label(gui, text="Select your place : ")
            self.textStation.grid(column=0,row=2)
     
            self.optionList = ('Paris', 'Tokyo', 'Londres','NewYork')
            self.var = StringVar(gui)
            self.optionmenu = apply(OptionMenu, (gui,self.var) + tuple(self.optionList))
            self.optionmenu.grid(column=1, row=2,sticky="WE")
     
            self.buttonStation = Button(gui,text=u"Place", command = self.getPlaceValue)
            self.buttonStation.grid(column=2,row=2)
     
    #QUIT########################################################### 
            self.buttonQuit = Button(gui, text='Quit', command = gui.quit)
            self.buttonQuit.grid(column=3,row=3)
     
    #SAVE AS########################################################### 
            self.buttonSaveAs = Button(gui,text=u"Save As")
            self.buttonSaveAs.grid(column=2,row=3)  
     
    #RUN###########################################################        
            self.buttonRun=Button(gui,text=u"Run")
            self.buttonRun.grid(column=1,row=3)
     
    #function to get timeAfter as a datetime and inject into MyProgramm    
        def getAfter(self):
            afterString = self.entry.get()
            timeAfter=datetime.strptime(afterString,'%Y/%m/%d')
            print 'after ' + afterString 
            return timeAfter
     
    #function to get timeBefore as a datetime and inject into MyProgramm        
        def getBefore(self):
            beforeString = self.entry.get()
            timeBefore= datetime.strptime(beforeString,'%Y/%m/%d')        
            print 'before ' + beforeTxT
            return timeBefore
     
    #function to get sationPlace as a string and inject into MyProgramm         
        def getPlaceValue(self):
            stationPlace = self.var.get()
            return stationPlace        
     
    gui = Tk()
     
    app = App(gui)
     
    gui.mainloop()
    gui.destroy()

  2. #2
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Salut et bienvenue sur le forum.

    Tu as créé une classe pour ton IHM.

    Dans ton programme principal, tu dois importer ton module contenant ta classe IHM, puis créer un objet à partir de cette classe.

    Ton __init__ de classe IHM doit par contre etre modifié. Il faut en effet passer à ton ihm, lors de la creation de l'objet, les fonctions de ton autre module

    Un petit exemple pour etre plus clair: ton __init__ devrait ressembler à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def __init__(self, gui, query_d, write_index, read_index):
        self.query_d = query_d
        self.write_index = write_index
        self.read_index = read_index
        ...
    Sinon, je t'invite à lire les PEP8 & PEP20 qui définissent les règles de programmation. Les fonctions/procedures s'écrivent tout en minuscule avec des underscore (comme dans mon exemple). Ces PEP ne sont pas obligatoires, mais fortement recommandé. Des logiciels d'analyse de qualité de code rejetteront ton code s'il ne respecte pas les PEP.

    En fin de tes fichier ajoute également un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if __name__ == "__main__":
        ...
    __name est renseigné à chaque accès au module. S'il vaut __main__ c'est qu'on a directement lancé le module, sinon c'est qu'on y a accédé depuis l'extérieur (import par exemple). Cela permet de gérer plus proprement les actions à effectuées en focntion du type d'accès.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Merci pour ton message. J'ai lu la PeP 8, ça m'a appris pas mal de chose ! par contre le poeme de la PeP 20 est un peu obscur pour moi.
    J'ai maintenant ma GUI qui fait tourner le programme ! Thx !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Merci de cliquer sur lorsque votre problème a trouvé solution.

    @+.

  5. #5
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    De rien,

    Concernant la PEP8, très important de la respecter au maximum. Concernant la PEP20, ben... c'est la PEP20, faut lire entre les lignes
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

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

Discussions similaires

  1. envoyer un mail avec mon programme
    Par shrek dans le forum C++Builder
    Réponses: 8
    Dernier message: 06/12/2006, 12h27
  2. [JAR] Lancer mon programme
    Par Nico66 dans le forum Général Java
    Réponses: 6
    Dernier message: 08/12/2004, 15h29
  3. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59
  4. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52
  5. Réponses: 11
    Dernier message: 17/03/2003, 10h56

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