Tkinter,Windows:如何查看Windows任务栏中没有标题栏的窗口?

2024-03-14

我创建了一个窗口:

root = Tk()

并删除了标题栏:

root.overrideredirect(True)

现在该窗口不在Windows 的任务栏上。如何在任务栏中显示它? (如果其他窗口在我的上面,我只想将我的窗口放在前面)


Tk 没有提供一种方法来拥有一个具有以下功能的顶层窗口:覆盖重定向设置为显示在任务栏上。为此,窗口需要具有WS_EX_APPWINDOW https://msdn.microsoft.com/en-us/library/windows/desktop/ff700543(v=vs.85).aspx应用了扩展样式,并且这种类型的 Tk 窗口设置了 WS_EX_TOOLWINDOW。我们可以使用 python ctypes 扩展来重置它,但我们需要注意 Windows 上的 Tk 顶级窗口不是由窗口管理器直接管理的。因此,我们必须将这种新样式应用于由winfo_id method.

以下示例显示了这样一个窗口。

import tkinter as tk
import tkinter.ttk as ttk
from ctypes import windll

GWL_EXSTYLE = -20
WS_EX_APPWINDOW = 0x00040000
WS_EX_TOOLWINDOW = 0x00000080

def set_appwindow(root):
    hwnd = windll.user32.GetParent(root.winfo_id())
    style = windll.user32.GetWindowLongPtrW(hwnd, GWL_EXSTYLE)
    style = style & ~WS_EX_TOOLWINDOW
    style = style | WS_EX_APPWINDOW
    res = windll.user32.SetWindowLongPtrW(hwnd, GWL_EXSTYLE, style)
    # re-assert the new window style
    root.withdraw()
    root.after(10, root.deiconify)

def main():
    root = tk.Tk()
    root.wm_title("AppWindow Test")
    button = ttk.Button(root, text='Exit', command=root.destroy)
    button.place(x=10, y=10)
    root.overrideredirect(True)
    root.after(10, set_appwindow, root)
    root.mainloop()

if __name__ == '__main__':
    main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tkinter,Windows:如何查看Windows任务栏中没有标题栏的窗口? 的相关文章

随机推荐