我一直在使用Windows API调用,这样我就可以使用Tkinter获得一些本机Windows窗口样式。当我试图阻止窗口可调整大小时,我遇到了问题。在映射窗口之前使用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()
答案 0 :(得分:3)
以下是一些想法:
您可以尝试删除WS_THICKFRAME样式:
frame.ModifyStyle(win32con.WS_THICKFRAME, 0)
另一种方法是处理WM_GETMINMAXINFO消息,该消息返回窗口的最小和最大宽度和高度。在您的情况下,您将返回当前的宽度和高度。您可以使用GetWindowRect获取此信息。
答案 1 :(得分:2)
我不知道python角度,但另一种防止窗口可调整大小的方法(除了改变它的样式)是处理WM_WINDOWPOSCHANGING并用你想要的大小覆盖新的大小。