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 :

Class, Redimentionnement, amélioration de code


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut Class, Redimentionnement, amélioration de code
    Bonjour,

    J'ouvre un sujet que je pense fermer quand les divers sous-sujets auront été abordés.

    J'ai réalisé ma première interface C'est cool, mais c'est pas tout à fait ce que je voulait. C'est, comment dire, bordélique oh pas possible ! On y retrouverais plus un "self" d'un "parent", d'un "button", d'un "entry"...

    J'ai donc décidé de refaire à zero, ou presque. En effet, j'ai basculé l'ossature du soft avec l'utilisation de classes. C'est plus propre visuellement. Avant de partir dans tous les sens, j'aimerais faire le point sur ce qui manque sur la précédente interface.

    1. Le redimensionnement ne fonctionne que partiellement (quand la fenêtre s'agrandit uniquement) - J'aimerais donc que ça fonctionne en X et en Y y compris quand nous redimensionnons la fenêtre en plus grand, comme en plus petit
    2. L'ergonomie est à revoir. Certains boutons sont positionner loin de leur utilités (revoir donc leurs positions)
    3. Les éléments de saisie ne sont pas clairs et trop rapprochés (il faudra ajouter des box avec des noms...)
    4. Certaines fonctions impliqueront des modifications des champs de saisie ; certains champs ne doivent pas être modifiable. Il faudra voir comment ça peut se protéger au final.


    J'ai donc attaqué une base saine dans lequel j'aimerais faire des essais. C'est mon point de départ :
    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
     
    import tkinter as tk
     
    #Variable custom
    vers = "1.0"
    name = "Test TKINTER"
     
    class Appli(tk.Frame):
        def __init__(self, parent):
            self.parent = parent
            tk.Frame.__init__(self, parent)
     
    def main():
        win = tk.Tk()
        Appli(win).pack(side = "top", fill = "both", expand = True)
        win.title(name + " - V " + vers)
        win.resizable(True, True)
        win.geometry("1080x600+100+20")
        win.minsize(360, 200)
        win.mainloop()
     
    if __name__ == "__main__":
        main()
    Je dois disposer d'un menu, en haut avec:
    File
    +New
    +Save
    +Save as
    + Close
    J'avais utilisé la première fois un bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #Widget Menu
    menuBar = Menu(root)
     
    fileMenu = Menu(menuBar, tearoff = 0)
    fileMenu.add_command(label = "Open", command = cmdOpen)
    fileMenu.add_command(label = "Save", command = cmdSave)
    fileMenu.add_command(label = "Save as", command = cmdSaveAs)
    menuBar.add_cascade(label = "File", menu = fileMenu)
    root.config(menu=menuBar)
    Ma première question, avant d'aller plus loin, c'est comment je vais intégrer le menu à ma classe ? Est-ce que je peux le placer dans un def menu(): ou même une classe ?

    Merci pour vos suggestions, la discussion est ouverte

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

    Citation Envoyé par Caxton Voir le message
    Ma première question, avant d'aller plus loin, c'est comment je vais intégrer le menu à ma classe ? Est-ce que je peux le placer dans un def menu(): ou même une classe ?
    Techniquement, le Menu (sauf s'il s'agit d'un pop up menu) est quelque chose qui s'ajoute à une fenêtre i.e. instance de Tk ou de Toplevel et qui ne change guère pendant la durée de vie du programme....
    Mais à ce menu seront associés des commandes qui doivent provoquer des changements via l'appel de fonctions/méthodes.
    Et pour l'instant, vous n'avez pas définit les fonctions/méthodes qu'il va falloir associer à ces commandes... et vous pouvez choisir de le faire dans "main" ou dans l'initialisation de la classe (mais c'est à vous de choisir).

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

  3. #3
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Et pour l'instant, vous n'avez pas définit les fonctions/méthodes qu'il va falloir associer à ces commandes... et vous pouvez choisir de le faire dans "main" ou dans l'initialisation de la classe (mais c'est à vous de choisir).
    Justement, quelle méthode est la plus correct. Je veux dire, celle qui bloquera le moins les évolutions future du logiciel ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Caxton Voir le message
    Justement, quelle méthode est la plus correct. Je veux dire, celle qui bloquera le moins les évolutions future du logiciel ?
    Ca dépend des évolutions futures que vous envisagez (mais que vous n'exposez pas). Après, il faut pas charrier, connecter un Menu à des fonctions, c'est juste quelque lignes de code que vous écrivez/modifiez sans soucis car l'interface est bien définie. Si demain vous changez d'avis, le nombre de lignes de code à mettre à jour sera réduit et bien délimité.

    Par contre, faire évoluer les fonctionnalités de l'application, c'est ajouter et modifier votre code et des interfaces dont vous n'avez pas encore écrit la version 0... Difficile d'avoir une idée de ce que pourrait vouloir dire ajouter la fonctionnalité X ou Y sans point de départ.

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

  5. #5
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    J'ai volontairement simplifié, au départ pour comprendre ce qui se passe. Mais c'est peut-être une erreur de ma part

    Bon, j'ai fait une tentative, elle compile, Ok. Mais c'est pas propre tout est l'un sur l'autre. Le code suivant est à améliorer !
    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
     
    import tkinter as tk
     
    #Variable custom
    vers = "1.0"
    name = "Test TKINTER"
     
    class Appli(tk.Frame):
        def __init__(self, parent):
            self.parent = parent
            tk.Frame.__init__(self, parent)
     
            self.menuBar = tk.Menu(self)
            menu = tk.Menu(self.menuBar, tearoff = 0)
            self.menuBar.add_cascade(label = "File", menu = menu)
            menu.add_command(label = "Open")
            menu.add_command(label = "Save")
            menu.add_command(label = "SAve as")
            self.parent.config(menu = self.menuBar)
     
    def main():
        win = tk.Tk()
        Appli(win).pack(side = "top", fill = "both", expand = True)
        win.title(name + " - V " + vers)
        win.resizable(True, True)
        win.geometry("1080x600+100+20")
        win.minsize(360, 200)
        win.mainloop()
     
    if __name__ == "__main__":
        main()
    Je parle amélioration, je pense créer une classe clMenuBar(). Auriez-vous un exemple ?

    Merci

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Caxton Voir le message
    Je parle amélioration, je pense créer une classe clMenuBar(). Auriez-vous un exemple ?
    Dire "je pense créer une classe" sans dire ce qu'elle fait ni comment elle va s'interfacer aux autres objets ne va pas inspirer grand monde (et tout cas pas moi) !
    Quand aux exemples, un peu de recherche sur Internet serait un bon début...

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

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

Discussions similaires

  1. diagramme classe a partir du code
    Par souha_line dans le forum C#
    Réponses: 5
    Dernier message: 27/01/2007, 02h20
  2. [Tableaux] Amélioration de code (if)
    Par Sir Tengu dans le forum Langage
    Réponses: 3
    Dernier message: 24/12/2006, 00h26
  3. [Sécurité] Comment amélioré mon code ?
    Par Nadd dans le forum Langage
    Réponses: 14
    Dernier message: 03/03/2006, 20h13
  4. [HIBERNATE] CLasses DAO générées avec code bizarre
    Par PamelaGeek dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 05/01/2006, 10h25
  5. Du diagramme de classe à la conception du code
    Par BRAUKRIS dans le forum Diagrammes de Classes
    Réponses: 8
    Dernier message: 08/05/2005, 18h57

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