Создание окна не изменяемого размера в Windows - PullRequest
4 голосов
/ 21 августа 2011

Я работал с вызовами Windows API, чтобы я мог настроить некоторые собственные стили окон 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()

Ответы [ 2 ]

3 голосов
/ 21 августа 2011

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

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

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

2 голосов
/ 24 августа 2011

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

...