События и свойства окна Python / Tkinter - PullRequest
3 голосов
/ 28 октября 2010

Я безуспешно искал информацию о следующих функциях окна Tkinter.Платформа Windows, Python 2.7.В конце этого поста приведен код, который можно использовать для изучения событий в окнах Tkinter.

  1. Как можно обнаружить события минимизации / максимизации окна?Объект события, возвращаемый связыванием с событием окна, содержит любую информацию об этих событиях.Я искал протоколы (например, WM_DELETE_WINDOW), которые могли бы раскрыть эти события без успеха.

  2. Как можно определить размеры границ рамки окна (не кадры Tkinter, рамки, которые ОС размещает вокругконтейнер, в котором Tkinter размещает свои виджеты)?Есть ли не-платформенный способ обнаружения этих свойств Windows, или мне нужно использовать платформо-зависимые решения, такие как win32 api под Windows?

  3. Как можно определить видимость окна, например,является ли окно невидимым или нет, как установлено .withdraw ()?

  4. Можно ли отменить событие окна, например,если кто-то хочет ограничить окно определенным местоположением на рабочем столе пользователя?Возвращение 'break' из события окна не отменяет события перемещения или изменения размера окна.

Вот пример кода для экспериментов с событиями окна 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( '<Configure>', onFormEvent )
root.mainloop()

Обновление:Вот что я узнал о следующих событиях:

  1. event.type == 22 (изменено одно или несколько из следующих значений: ширина, высота, x, y)

  2. event.type == 18 (минимизировано) event.widget.winfo_viewable () = 0 (невидимо)

  3. event.type == 19 (восстановление после минимизации)

  4. event.type == 2 (развернуть)

  5. event.type == 22 (восстановить после разворота из-за изменения ширины и высоты)

1 Ответ

2 голосов
/ 28 октября 2010

Определение видимости окна выполняется с помощью вызова .winfo_viewable (). Возвращает 1, если видим, 0, если нет.

Если вы хотите запретить изменение размера окна, настройте его так, как вы хотите, а затем используйте

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

в конце вашего __init__ звонка.

Чтобы полностью отключить перемещение окна, вы, вероятно, просто хотите удалить строку заголовка и рамку с помощью self.root.overrideredirect(True).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...