Forum Programmation.python exemple d'app python avec gui 'app smartphone'

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
17
juin
2020

Bonjour,
je cherche des exemples d'app écrites en python qui "ressemblent" à des appli pour smartphone.
Je m'explique : les applis pour smartphone "effacent" souvent tout l'écran incluant des boutons et toute une série de graphiques pour passer à un autre écran qui inclue toute une autre série de boutons et une autre série de graphiques.
En gros, je cherche à recréer un équivalent du menu d'un smartphone quand on se balade dans la section "paramètres" du smartphone.
Savez vous où je peux trouver des exemples en libre?
Merci

  • # Frame

    Posté par  . Évalué à 1. Dernière modification le 17 juin 2020 à 23:23.

    J'ai trouvé un truc mais jai un petit soucis dans ma compréhension de la bibliothèque tkinter et en particulier de Frame.
    Jai regardé la doc mais je n'ai pas trouvé.
    Ainsi, lorsque j'instancie un Frame dans le code ci-dessous, je ne comprend pas comment la class StartPage définit une "référence" à la fenêtre déjà instancié par Tk.
    Il y a les paramètre boss ou parent ou master que je vois souvent dans les codes ou dans la doc, mais sans que ce soit bien défini. et le parametre controller, mais je ne comprend pas bien. Dans la doc jai également vu le paramètre container=0 par défaut sans qu'il soit expliqué à quoi il sert.
    D'où ma question : comment Tk et Frame interagissent entre eux pour
    J'ai le meme soucis dans un exercice où un bouton instancie une nouvelle fenetre tk et je n'arrive pas à référencer les widgets de la nouvelle fenetre à la fenetre initiale.

    import tkinter as tk
    class Appli(tk.Tk):
        def __init__(self, *args, **kwargs):
            tk.Tk.__init__(self, *args, **kwargs)
            container = tk.Frame(self)
            container.pack(side="top", fill="both", expand = True)
            container.grid_rowconfigure(0, weight=1)
            container.grid_columnconfigure(0, weight=1)
            self.frames = {}#dictionnaire de fonction, chaque fonction    
            for F in (StartPage,Page2,Page3):
                frame = F(container, self)
                self.frames[F] = frame
                frame.grid(row=0, column=0, sticky="nsew")#les pages sont toutes instanciées
            self.page=StartPage 
            self.show_frame(self.page)
        def show_frame(self, cont):
            self.previous=self.page
            self.page=cont
            frame = self.frames[cont]
            frame.tkraise()
    
    class StartPage(tk.Frame):
        def __init__(self, parent, controller):
            tk.Frame.__init__(self,parent)
            label = tk.Label(self, text="Start Page", font=LARGE_FONT)
            label.pack(pady=10,padx=10)
    
            button = tk.Button(self, text="Entrer un évenement",
                                command=lambda: controller.show_frame(CatOne))
            button.pack()
    

    Je ne comprend pas "parent" et "controller". Visiblement

    • [^] # Re: Frame

      Posté par  . Évalué à 2. Dernière modification le 18 juin 2020 à 11:44.

      Salut,

      Je ne connais pas la librairie en particulier, donc, il faut probablement prendre cette réponse avec des pincettes.

      parent, en général, ça réfère à la fenêtre "mère" (celle sur laquelle l'utilisateur a cliqué pour avoir une nouvelle fenêtre).

      Quand à controller je subodore que c'est juste la partie "C" d'un MVC :)

      Matricule 23415

      • [^] # Re: Frame

        Posté par  . Évalué à 1.

        ok merci, effectivement le code initial fait référence à controller pour le modèle mvc.
        j'ai trouvé container dans une doc subsidiaire, cest assez incompréhensible: lorsqu'on met cette option sur 1 on a :

        "this window will be used as a container in which some other application will be embedded[…]The window should not have any children of its own in this application"
        En d'autres termes, la frame pourra "embeddé" (contenir) d'autres applications, mais ne devrait pas avoir de "children of its own". Pourtant, si une frame contient d'autre widgets, ces widgets sont bien des "children" de la frame non?

        Pour les autres mots clés master, parent, et boss, cest simplement pour désigner la fenêtre "mère", mais d'apres quelques exemples dans Swinnen y a également le mot clé master qui semble "réservé" dans tkinter, notamment si on instancie un frame sans avoir pré-instancié une fenêtre mère. je me demandais si ces autres mots clés sont potentiellement "réservés" systématiquement mais ca ne semble pas le cas

        • [^] # Re: Frame

          Posté par  . Évalué à 2.

          Salut,

          L'UI, même si j'en ai fait, c'est pas ma spécialité du tout. Et encore moins dans un contexte mobile.

          En gros, moi je comprend que l'application mère ne doit pas pouvoir créer de nouvelles "Frames", car ça peut gêner au niveau UI.

          Mais je peux être complètement à côté de la plaque…

          Matricule 23415

        • [^] # Re: Frame

          Posté par  . Évalué à 2.

          En d'autres termes, la frame pourra "embeddé" (contenir) d'autres applications, mais ne devrait pas avoir de "children of its own". Pourtant, si une frame contient d'autre widgets, ces widgets sont bien des "children" de la frame non?

          sauf que ce n'est pas toi qui va gérer ces enfants (children) mais l'application que tu lances dedans.

          donc ton seul enfant sera l'application lancée dans le conteneur.

      • [^] # Re: Frame

        Posté par  . Évalué à 1. Dernière modification le 18 juin 2020 à 18:09.

        une petite question supplémentaire: dans le cas du code ci-dessus, quand on instancie une StartPage, le constructeur de cette classe est défini par

        def __init__(self, parent, controller):
        et la fonction qui l'instancie est définie dans la classe Appli par :

        F(container, self)
        Du coup, le controller de l'instanciation de StartPage est bien l'objet instancié préalablement par la classe Appli, n'est ce pas?

        • [^] # Re: Frame

          Posté par  . Évalué à 2. Dernière modification le 18 juin 2020 à 18:17.

          Salut,

          A nouveau, pas trop regardé le code, mais si tu as plusieurs instances d'un controller, il y a moyen que ça pose des petits soucis…

          Matricule 23415

          • [^] # Re: Frame

            Posté par  . Évalué à 1.

            jai un soucis avec la distinction attribut et fonction:
            j'instancie un objet Appli dont la classe est héritée de tk.
            je crée un app=Appli()
            jai définie une fonction à l'intérieur de la classe Appli

                def create_occur(self,date,where):
                    print("hello {1} et {2}".format(date,where))
            

            lorsque je fais un app.create_occur("1","2")
            il me met
            AttributeError: '_tkinter.tkapp' object has no attribute 'create_occcur'
            comme si il comprenait pas que c'est une fonction?

            • [^] # Re: Frame

              Posté par  . Évalué à 2.

              Salut,

              Combien de c dans l'appel create_occcur ? :)

              Matricule 23415

              • [^] # Re: Frame

                Posté par  . Évalué à 1.

                ahah putain j'ai du passer une demi heure à chercher
                merci

                • [^] # Re: Frame

                  Posté par  . Évalué à 2. Dernière modification le 19 juin 2020 à 11:31.

                  Salut,

                  Moi, à peine deux minutes :p (le temps de bien compter tous les c quoi :) ).

                  Matricule 23415

          • [^] # Re: Frame et imbrication d'instances

            Posté par  . Évalué à 1.

            Salut,
            je reviens sur cette histoire de controller.
            dans le code plus haut, j'instancie PageOne à partir de l'instance de la classe Appli.
            PageOne fait référence au controller dans sa méthode constructeur et je peux donc utiliser controller.fonctionA ou controller.fonctionB ou controller.attribut dans le déroulée de la methode constructeur.
            Par contre, si je définis une fonction ou une méthode dans ma classe PageOne et que je fais référence à controller (qui est un des arguments de la methode constructeur) il ne comprend plus.
            D'où ma question: est ce que c'est ok de faire un self.controller=controller dans la methode constructeur?
            est ce que ca dédouble pas le constructeur? je sais que pour les listes par exemple a=liste1 et b=a font que a et b sont des alias qui renvoient au meme objet. Mais il n'en est pas de même pour d'autres types d'objets..

            merci

            • [^] # Re: Frame et imbrication d'instances

              Posté par  . Évalué à 2. Dernière modification le 19 juin 2020 à 21:55.

              Salut,

              est ce que c'est ok de faire un self.controller=controller dans la methode constructeur?

              Bah à priori oui, tu fais juste que copier l'adresse donc il n'y a pas de duplication de controller.

              Par contre, je ne sais pas si plein de monde lis tes messages, car ils arrivent dans un fil, pas forcément suivi.

              Juste pour info du coup, deux points sur les règles plus ou moins de vigueur ici :

              1. On n'est pas ton prof donc on ne fera pas tes devoirs à ta place, ou très cher (celle-là, des échanges, j'ai le sentiment que tu la respecte),
              2. Chaque problème a droit à son nouveau post. Si t'enchaine les questions comme tu fais dans un seul fil tu as moins de chances d'avoir quelqu'un qui s'y intéresse. Et c'est plus dur à retrouver. Donc même si ça veut dire plein de nouvelles entrées, je crois que ce n'est pas grave, et si ça l'était, quelqu'un de la modération te le dira si ça commence à faire trop. ;)

              Je pense que si tu aplique la 2 tu aura plus de réponses ;)

              Matricule 23415

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.