2
votes

Comment fermer plusieurs fenêtres en un seul clic?

Je souhaite fermer deux fenêtres en même temps lorsque l'utilisateur clique sur le bouton Démarrer, la nouvelle fenêtre apparaîtra et lorsque l'utilisateur clique sur le bouton Quitter de la deuxième fenêtre contextuelle, la fenêtre devrait se fermer à la fois

Je sais que pour une fenêtre différente, je dois créer une fonction distincte pour quitter les fenêtres Mais je veux fermer plus d'une fenêtre en un seul clic.

J'utilise python 3.7!

import tkinter

def NewWindow():

    def qExit():
        root.destroy()

    root = tkinter.Tk()
    root.title("New Window")
    newButton = tkinter.Button(root, text=" Click here  to Exit:",
                                command=qExit)
    newButton.pack()
    root.geometry("300x200")
    root.mainloop()


Window = tkinter.Tk()
Window.title("hello")
eButton = tkinter.Button(Window, text="Start", command=NewWindow)
eButton.pack()
Window.geometry("200x200")
Window.mainloop()


5 commentaires

salut! Je vous recommande de corriger l'indentation dans votre exemple de code. Dans l'état actuel des choses, on ne sait pas où vos fonctions commencent et se terminent.


Peux-tu m'aider avec ceci ??


@Valentino: L'indentation me convient.


avez-vous essayé Window.destroy () dans qExit () ?


L'indentation @martineau est bien maintenant. Le PO l'a édité.


3 Réponses :


0
votes

Une solution simple serait de simplement faire exit () pour arrêter le programme, ce qui fermera toutes les fenêtres. vous pouvez également faire une liste de tous les objets de fenêtre ouverts et appeler destroy sur chacun d'eux.


0 commentaires

0
votes

Pas besoin de description

def qExit():
    root.destroy()
    Window.destroy()


0 commentaires

0
votes

Vous ne devez pas appeler tkinter.Tk () plus d'une fois dans une application tkinter . Appelez Toplevel () a > si vous souhaitez créer une nouvelle fenêtre.

Vous n'avez généralement pas besoin d'appeler mainloop () plus d'une fois.

Pour fermer à la fois la nouvelle fenêtre et la fenêtre principale, vous pouvez passer cette dernière à la première lorsque vous la créez, puis destroy () que dans votre fonction qExit () (ainsi que la nouvelle fenêtre lui-même).

Remarque J'ai changé certains des noms de fonction et de variable pour me conformer davantage à la PEP 8 - Guide de style pour le code Python .

import tkinter

def makeWindow(parent):

    def qExit():
        newWindow.destroy()
        parent.destroy()

    newWindow = tkinter.Toplevel()
    newWindow.geometry("300x200")
    newWindow.title("New Window")
    newButton = tkinter.Button(newWindow, text=" Click here  to Exit",
                               command=qExit)
    newButton.pack()


root = tkinter.Tk()
root.title("hello")
eButton = tkinter.Button(root, text="Start", command=lambda: makeWindow(root))
eButton.pack()
root.geometry("200x200")
root.mainloop()


0 commentaires