réinitialiser une fenêtre graphique python

a marqué ce sujet comme résolu.

Bonjour, dans le cadre d’un projet scolaire en ISN je dois créer un programme pour une histoire interactive, comme les livres dont vous êtes le héros. Pour cela je souhaite que lorsque j’appuie sur l’un des 2 boutons représentant les 2 choix possible, la fenêtre soit réinitialiser. C’est à dire que le texte soit remplacé par le nouveaux chapitres et que les boutons représente les 2 nouveaux choix. Et ainsi de suite jusqu’à l’une des fins possibles.

Voici le début de mon programme

from tkinter import *
####Chapitre 1 : situation initial#####
def chapitre1():
    tex = Message(fen, text='...', fg='blue')
    tex.pack()
    bou1 = Button(fen, text='Je suis Kitty', command = Chapitre2a)
    bou1.pack(side='right')
    bou2 = Button(fen, text='Je suis max', command = chapitre2b)
    bou2.pack(side='left')

####En cliquant sur le 1er boutons####
def Chapitre2a():
    tex = Message(fen, text= '...', fg='blue')
    tex.pack()
    bou1 = Button(fen, text='J ai une carte du labyrinthe', command =chapitre3a)
    bou1.pack(side='right')
    bou2 = Button(fen, text='Et toi ?', command = chapitre3b)
    bou2.pack(side='left')

####En cliquant sur le 2e boutons####
def chapitre2b():
    tex = Message(fen, text= '...', fg='blue')
    tex.pack()
    bou1 = Button(fen, text='J ai une carte du labyrinthe', command = chapitre3c)
    bou1.pack(side='right')
    bou2 = Button(fen, text='Et toi ?', command = chapitre3d)
    bou2.pack(side='left')



####Introduction#####
fen = Tk()
tex = Message(fen, text= 'Dans un monde où une rivalité entre les chiens et les chats fait rage, la guerre est de rigueur et une haine incommensurable plane dans les deux clans... Les deux clans vivent dans des châteaux voisins, séparés par un labyrinthe... ', fg='blue')
tex.pack()
####Lire notre histoire#####
bou1 = Button(fen, text='Suivant', command = chapitre1)
bou1.pack(side="right")
####Quitter#####
bou2 = Button(fen, text='Quitter', command = fen.destroy)
bou2.pack(side="left")
fen.mainloop()
+0 -0

Je ne connais pas plus que ça Tk, j’ai juste regardé la doc, donc à tester — ce n’est qu’une piste :)

Vu qu’on a une méthode qui retourne la liste des enfants, on peut imaginer la possibilité de créer une méthode qui vide une fenêtre en bouclant dessus et en appelant la méthode qui supprime le widget (destroy si je ne dis pas de bêtise ? je te laisse confirmer ou corriger le cas échéant).

Quelque chose comme ça :

def reset(fen):
    for widget in fen.winfo_children():
        widget.destroy()

et on l’utiliserait avant de reconstruire un nouveau chapitre :

def chapitre1():
    reset(fen)
    # ...

Si la méthode que je propose ne fonctionne pas, je t’invite à chercher une méthode dans la doc de Tk qui retourne une liste de widgets enfants, et faire quelque chose comme ça, à moins qu’il n’existe une méthode vidant directement les widgets enfants et alors c’est gagné.

Il ne faut juste pas oublier qu’une fenêtre, sur Tk, c’est un widget comme un autre, donc il dispose des mêmes méthodes que tous les autres widgets (en plus de quelques unes spécifiques, je crois). Ce qui étend le champ de recherche : toute solution permettant de supprimer les widgets enfants d’un widget fonctionnera sur une fenêtre.

+0 -0

Si j’avais ça à faire, je définirais un widget Text, disons :

blabla = Text(topframe, width=100, height=10)
blabal.pack( side=TOP)
### pour y écrire  :
blabla.insert(END, "voila mon texte")
### pour l'effacer :
blabla.delete("1.0",END)

Ensuite, je mettrais mes textes dans un dictionnaire, dont la clé serait
l’identifiant du texte (chez toi, 2a, 2b, 3a, 3b …),
avec en valeur un tuple : le texte, l’identifiant suite_a, le texte du bouton _a et l’identifiant suite_b et le texte du bouton_b.

Ensuit, l’action est toujours la même: aller chercher dans le dictionnaire ce dont on a besoin pour la suite…

+0 -0

Bonjour,

L’objectif des fonctions et d’éviter les redondances possibles… En soit les trois fonctions sont redondantes et on imagine très bien ce qu’elles ont en commun et ce qui les distingue.

Il faudrait déjà améliorer le code avant qu’il ne soit vraiment trop verbeux en le modifiant afin de passer de 3 ou n fonctions (chapitres) en une seule fonction.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte