Запрет изменения размера окна в Windows

Я работал с вызовами API Windows, чтобы получить некоторые собственные стили окон Windows, работающие с Tkinter. Я столкнулся с проблемами, когда пытался предотвратить изменение размера окна. Использование root.resizable(False, False) перед сопоставлением окна дает эффект, мало чем отличающийся от эффекта метода root.overrideredirect(True); вызов его после того, как стиль был изменен, вызывает всевозможные сумасшествия (окно психует). Я думаю, что, вероятно, есть специфичный для Windows эквивалент root.resizable(False, False). Как мне заставить это работать? Имейте в виду, что у меня есть дескриптор окна Tkinter.

Код :

import Tkinter as tk
import string, win32ui, win32con

def decaption(event):
    root = event.widget

    # makes a handle to the window
    handle = string.atoi(root.wm_frame(), 0)

    # changes the style
    frame = win32ui.CreateWindowFromHandle(handle)
    frame.ModifyStyle(win32con.WS_CAPTION, 0, win32con.SWP_FRAMECHANGED)

    root.bind("<Map>", None)

root = tk.Tk()

# changes the style when the window is mapped
root.bind("<Map>", decaption)

root.mainloop()

person rectangletangle    schedule 21.08.2011    source источник


Ответы (2)


Я понятия не имею об угле python, но еще один способ предотвратить изменение размера окна (в дополнение к изменению его стиля) - это обработать WM_WINDOWPOSCHANGING и переопределить новый размер желаемым размером.

person Luke    schedule 24.08.2011

Вот несколько идей:

  • Вы можете попробовать удалить стиль WS_THICKFRAME:

    frame.ModifyStyle(win32con.WS_THICKFRAME, 0)
    
  • Другой альтернативой является обработка WM_GETMINMAXINFO. сообщение, которое возвращает минимальную и максимальную ширину и высоту окна. В вашем случае вы вернете текущую ширину и высоту. Вы можете получить эту информацию с помощью GetWindowRect.

person alf    schedule 21.08.2011