Propiedades y eventos de la ventana de Python / Tkinter

He estado buscando información sobre las siguientes funciones de la ventana de Tkinter sin éxito. La plataforma es Windows, Python 2.7. Al final de esta publicación hay un código que puede usarse para explorar los eventos de la ventana de Tkinter.

  1. ¿Cómo se puede detectar una ventana minimizar / maximizar eventos? El objeto de evento devuelto mediante el enlace a un evento de ventana contiene información sobre estos eventos. He buscado protocolos (como WM_DELETE_WINDOW) que podrían exponer estos eventos sin éxito.

  2. ¿Cómo se puede determinar el tamaño de los bordes del marco de la ventana (no los marcos Tkinter, el marco que el sistema operativo coloca alrededor del contenedor donde Tkinter coloca sus widgets)? ¿Existe alguna forma no específica de plataforma para descubrir estas propiedades de Windows o debo utilizar soluciones específicas de la plataforma como la api de win32 en Windows?

  3. ¿Cómo se puede determinar la visibilidad de una ventana, por ejemplo. ¿Una ventana es invisible o no según lo establecido por .withdraw ()?

  4. ¿Es posible cancelar un evento de ventana, por ejemplo. ¿Si uno quisiera restringir una ventana a una determinada ubicación en el escritorio de un usuario? El hecho de devolver un “descanso” del evento de una ventana no cancela el movimiento de la ventana ni cambia el tamaño de los eventos.

Aquí hay un código de ejemplo para experimentar con eventos de la ventana 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() 

Actualización: Esto es lo que aprendí sobre los siguientes eventos:

  1. event.type == 22 (uno o más de los siguientes cambios: ancho, alto, x, y)

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

  3. event.type == 19 (restaurar después de minimizar)

  4. event.type == 2 (maximizar)

  5. event.type == 22 (restaurar después de maximizar al cambiar el ancho y la altura)

La determinación de la visibilidad de la ventana se realiza con una llamada .winfo_viewable (). Devuelve 1 si está visible, 0 si no.

Si desea evitar que la ventana cambie de tamaño, configure su ventana de la forma que desee y luego utilice

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

al final de su __init__ llamada.

Para deshabilitar completamente la ventana para que no se mueva, es probable que desee eliminar la barra de título y el marco con self.root.overrideredirect(True) .