2011-08-21 51 views
4

我一直在使用Windows API調用,以便可以使用Tkinter的某些本機Windows窗口樣式。當我嘗試阻止窗口大小可調時,我遇到了問題。在窗口映射之前使用root.resizable(False, False)會產生與root.overrideredirect(True)方法不同的效果;在風格改變之後調用它導致各種瘋狂(窗口嚇壞了)。我在想,可能有一個窗口特定的相當於root.resizable(False, False)。我將如何得到這個工作?請記住我有一個Tkinter窗口的句柄。使窗口在Windows中不可調整大小

代碼:

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

我不知道關於蟒蛇的角度,但要防止一個窗口,是可調整大小的(除了改變它的風格),另一種方法是處理WM_WINDOWPOSCHANGING並與你想要的大小重寫新的大小。

3

這裏有一對夫婦的想法:

  • 你可以嘗試刪除WS_THICKFRAME風格:

    frame.ModifyStyle(win32con.WS_THICKFRAME, 0) 
    
  • 另一種方法是處理WM_GETMINMAXINFO消息,該消息返回窗口的最小和最大寬度和高度。在你的情況下,你會返回當前的寬度和高度。您可以通過GetWindowRect獲取此信息。