Comment puis-je gérer la fenêtre près de l'événement dans Tkinter?
Comment puis-je gérer la fenêtre près de l'événement (utilisateur cliquant sur le bouton "X") dans un Python Tkinter programme?
Vous devez vous connecter pour publier un commentaire.
Tkinter, en faveur d'un mécanisme appelé gestionnaires de protocole. Ici, le terme protocole se réfère à l'interaction entre l'application et le gestionnaire de fenêtre. Les plus couramment utilisés protocole est appelé
WM_DELETE_WINDOW
, et est utilisé pour définir ce qui se passe lorsque le consentement explicite de l'utilisateur ferme une fenêtre à l'aide du gestionnaire de fenêtre.Vous pouvez utiliser le
protocol
méthode pour installer un gestionnaire pour ce protocole (le widget doit être unTk
ouToplevel
widget):Ici vous avez un exemple concret:
root.destroy()
Tkinter
n'avais pas un sous-module messagebox. J'ai utiliséimport tkMessageBox as messagebox
Matt a montré l'un des classiques de la modification du bouton fermer.
L'autre est d'avoir le bouton de fermeture de minimiser la fenêtre.
Vous pouvez reproduire ce comportement par le fait d'avoir le iconifie méthode
être le protocole méthode du deuxième argument.
Voici un exemple de travail, testé sur Windows 7:
Dans cet exemple, nous donnons à l'utilisateur deux nouvelles options de sortie:
le classique menu fichier -> à la Sortie, et aussi le Esc bouton.
Selon le Tkinter activité à la fin de l'esp. lors de l'utilisation de Tkinter.après, l'arrêt de cette activité avec
destroy()
- même en utilisant le protocole(), un bouton, etc. -- va perturber cette activité ("lors de l'exécution d'erreur") plutôt que de simplement y mettre fin. La meilleure solution dans presque tous les cas est d'utiliser un drapeau. Voici un simple exemple stupide de la façon de l'utiliser (même si je suis certaine que la plupart d'entre vous n'en avez pas besoin! 🙂Cela met fin à l'activité graphique bien. Vous avez uniquement besoin de vérifier
running
au bon endroit(s).Essayer La Version Simple:
Ou Si Vous Voulez Ajouter Plus De Commandes:
Utiliser le closeEvent