Événements et propriétés de la fenêtre Python / Tkinter

J’ai recherché des informations sur les fonctionnalités de la fenêtre Tkinter suivantes sans succès. La plate-forme est Windows, Python 2.7. À la fin de cet article, il y a un code qui peut être utilisé pour explorer les événements de la fenêtre Tkinter.

  1. Comment peut-on détecter la fenêtre minimiser / maximiser les événements? L’object événement renvoyé par la liaison à un événement de fenêtre contient des informations sur ces événements. J’ai cherché des protocoles (comme WM_DELETE_WINDOW) qui pourraient exposer ces événements sans succès.

  2. Comment déterminer la taille des bordures des frameworks de fenêtres (pas les frameworks Tkinter, le cadre que le système d’exploitation place autour du conteneur où Tkinter place ses widgets)? Existe-t-il un moyen non spécifique à la plate-forme de découvrir ces propriétés Windows ou dois-je utiliser des solutions spécifiques à la plate-forme telles que l’api win32 sous Windows?

  3. Comment peut-on déterminer la visibilité d’une fenêtre, par exemple. si une fenêtre est invisible ou non définie par .withdraw ()?

  4. Est-il possible d’annuler un événement de fenêtre, par exemple. si l’on voulait contraindre une fenêtre à un certain emplacement sur le bureau d’un utilisateur? Le fait de renvoyer «pause» à partir d’un événement de fenêtre n’annule pas le déplacement de la fenêtre ou le redimensionnement des événements.

Voici un exemple de code pour tester les événements de la fenêtre Tkinter.

def onFormEvent( event ): for key in dir( event ): if not key.startswith( '_' ): print '%s=%s' % ( key, getattr( event, key ) ) print import Tkinter as tkinter root = tkinter.Tk() lblText = tkinter.Label( root, text='Form event tester' ) lblText.pack() root.bind( '', onFormEvent ) root.mainloop() 

Mise à jour: Voici ce que j’ai appris sur les événements suivants:

  1. event.type == 22 (un ou plusieurs des éléments suivants modifiés: width, height, x, y)

  2. event.type == 18 (minimisé) event.widget.winfo_viewable () = 0 (invisible)

  3. event.type == 19 (restaurer après minimisé)

  4. event.type == 2 (maximiser)

  5. event.type == 22 (restauration après maximisation due à un changement de largeur et de hauteur)

La visibilité de la fenêtre est déterminée avec un appel à .winfo_viewable (). Retourne 1 si visible, 0 sinon.

Si vous souhaitez empêcher le redimensionnement de la fenêtre, configurez votre fenêtre comme vous le souhaitez, puis utilisez

 self.root.minsize(self.root.winfo_reqwidth(), self.root.winfo_reqheight()) self.root.maxsize(self.root.winfo_reqwidth(), self.root.winfo_reqheight()) 

à la fin de votre appel __init__ .

Pour désactiver complètement le déplacement de la fenêtre, vous souhaiterez probablement simplement supprimer la barre de titre et le cadre avec self.root.overrideredirect(True) .