标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。