如何自定义窗口#
对于自定义窗口,大家可能都不陌生,自定义标题栏,自定义边框等。我们需要知道可以win32去除标题栏,
WS_CAPTION
可以设置窗口是否有标题栏,而如果直接这样使用是不行的,实际上隐藏后,窗口没有刷新,会导致出现一些显示错误,
所以使用SetWindowPos
设置标题栏位置,并使用UpdateWindow
刷新即可。
我们需要先获取窗柄
from win32gui import GetParent, SetWindowLong, GetWindowLong, SetWindowPos, UpdateWindow
from win32con import GWL_STYLE, WS_CAPTION, NULL, SWP_NOSIZE, SWP_NOMOVE, SWP_NOZORDER, SWP_DRAWFRAME
from tkinter import Tk
hWnd = 0
def Get_hWnd():
global hWnd
hWnd = GetParent(Root.winfo_id())
SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) & ~WS_CAPTION)
SetWindowPos(hWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_DRAWFRAME)
UpdateWindow(hWnd)
Root = Tk()
Root.after(1, Get_hWnd)
Root.mainloop()
这样我们就得到了一个无标题栏的窗口,可这还不过,我们需要创建标题栏, 可以参见关于自定义标题栏的这篇文章,创造标题栏。
扩展#
我还是在写一些制作标题栏的吧,我们使用DevWindow和DevHeaderBar一起使用创建完美的自定义标题栏。
from tkdev4 import DevHeaderBar, DevWindow
Root = DevWindow()
TitleBar = DevHeaderBar(Root)
TitleBar.add_close_button()
TitleBar.add_maximize_button()
TitleBar.add_minimize_button()
Root.titlebar(TitleBar)
Root.mainloop()