Fam*_*tor 6 python windows tkinter python-3.4
我创建了一个窗口:
root = Tk()
Run Code Online (Sandbox Code Playgroud)
并删除标题栏:
root.overrideredirect(True)
Run Code Online (Sandbox Code Playgroud)
现在窗口不在Windows的任务栏上.如何在任务栏中显示它?(如果其他窗户在我的上面,我只想把窗户拉到前面)
Tk没有提供一种方法来拥有一个顶层窗口,该窗口的overrideredirect设置显示在任务栏上.要执行此操作,窗口需要应用WS_EX_APPWINDOW扩展样式,并且此类型的Tk窗口设置为WS_EX_TOOLWINDOW.我们可以使用python ctypes扩展来重置它,但是我们需要注意Windows上的Tk顶层窗口不是由窗口管理器直接管理的.因此,我们必须将此新样式应用于该winfo_id方法返回的窗口的父级.
以下示例显示了这样一个窗口.
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.wm_withdraw()
root.after(10, lambda: root.wm_deiconify())
def main():
root = tk.Tk()
root.wm_title("AppWindow Test")
button = ttk.Button(root, text='Exit', command=lambda: root.destroy())
button.place(x=10,y=10)
root.overrideredirect(True)
root.after(10, lambda: set_appwindow(root))
root.mainloop()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)