Comment modifier après coup une fenêtre python

Résolu

Bonjour,

Je suis un codeur plus ou moins débutant en python. J'aurais aimé savoir si il était possible, et si oui, comment, de faire des modifications après coup sur une fenêtre python.

Autrement dit:

from tkinter import*
F = Tk()
F.title("yes")
F.mainloop()
F.title("no")
F.mainloop()

Sauf que ça ne marche pas. PS: j'ai pris l'exemple de title mais c'est pareil et je veux le même chose pour tout. Merci.
Android / Chrome 104.0.0.0

7 réponses

  1. Contributeur

    bonjour,

    ajoute un print() après la ligne 4, cela t'aidera à comprendre ce qui se passe.

    "après coup", c'est quand, en réalité?

    1. Merci mais je met quoi entre les parenthèses ?

      Après coup, c'est plus tard dans le code n'importe ou

      Merci

      1. Contributeur

        par exemple print("après mainloop")

      2. Contributeur

        Ceci, alors:

        from tkinter import*
        F = Tk()
        F.title("yes")
        F.title("no")
        F.mainloop()
    2. Ok merci beaucoup mais du coup, si j'ai bien compris, des que la fenêtre va s'afficher, elle s'appellera no,non?

      1. Contributeur

        Tu n'as pas répondu à ma question : ""après coup", c'est quand, en réalité?".

        Tu veux le faire par un bouton, après un délai, avant ou après que la fenêtre soit interactive?

    3. Après un délai si possible (une fois que environ 5 secondes soit passées avec la fenêtre d'intro)

      1. Contributeur
        import tkinter
        import time
        F = tkinter.Tk()
        F.title("yes")
        F.update()
        time.sleep(5)
        F.title("no")
        F.mainloop()
    4. Ok merci infiniment,

      Pr Witherfire

      1. Contributeur

        La fenêtre devient "interactive" après mainloop(), les boutons commenceront à fonctionner, par exemple.  Il existe d'autres techniques pour programmer des actions après l'appel à mainloop().

        Merci, le moment venu, de marquer la discussion comme résolue.

    5. Bonsoir.

      Changer le contenu d'une fenêtre, c'est jouer avec les pack*, grid* et destroy.

      Exemple avec 2 fonctions, une affichant une intro, l'autre le programme principal. On peut cliquer sur le texte pour passer au programme principal qui sera de toute façon lancé après 5 secondes.

      import tkinter as tk
      
      WIDTH = 800
      HEIGHT = 600
      
      
      def main_app_run(window, previous_frame=None):
          window.title("Principal - Ciquez sur le texte pour quitter")
          frame_main = tk.Frame(window, bg="blue", width=WIDTH, height=HEIGHT)
          frame_main.grid_propagate(0)
          frame_main.grid_columnconfigure(0, weight=1)
          frame_main.grid_rowconfigure(0, weight=1)
          label_app = tk.Label(
              frame_main,
              text="programme\nprincipal",
              bg="darkBlue",
              fg="lightBlue",
              font=("", 80),
          )
          label_app.grid()
          if previous_frame is not None:
              previous_frame.destroy()
          frame_main.grid(sticky=tk.NSEW)
          label_app.bind("<Button-1>", lambda evt: window.destroy())
      
      
      def intro_app_run(window):
          window.title("Cliquez sur le texte !" )
          frame_intro = tk.Frame(window, bg="yellow", width=WIDTH, height=HEIGHT)
          frame_intro.grid(sticky=tk.NSEW)
          frame_intro.grid_propagate(0)
          frame_intro.grid_columnconfigure(0, weight=1)
          frame_intro.grid_rowconfigure(0, weight=1)
          label_intro = tk.Label(
              frame_intro, text="Introduction", bg="orange", fg="black", font=("", 64)
          )
          label_intro.grid()
          label_intro.bind("<Button-1>", lambda evt: main_app_run(window, frame_intro))
          frame_intro.after(5000, main_app_run, window, frame_intro)
      
      
      window = tk.Tk()
      intro_app_run(window)
      window.mainloop()

      Rien de bien compliqué ici, peut-être les fonctions nécessaires aux bons dimensionnements des frames. Bien évidemment ce n'est qu'un exemple, on peut à loisir changer le contenu des frames.