ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2019-05-28 09:44:17  阅读:868  来源: 互联网

标签:python windows tkinter python-3-4


我创建了一个窗口:

root = Tk()

并删除标题栏:

root.overrideredirect(True)

现在窗口不在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()

标签:python,windows,tkinter,python-3-4
来源: https://codeday.me/bug/20190528/1170166.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有