当前位置: 首页 > 面试题库 >

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

慕容宇
2023-03-14
问题内容

我创建了一个窗口:

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 2.7中创建了一个简单的tkinter窗口(tcl 8.5),并希望它最大化,就像我要按右上角的maximize按钮一样。使用 选项不是一个选项,因为它会删除标题栏。 我尝试了以下操作: 问题是窗口现在在Windows任务栏下面,因此我的一些元素没有显示出来。一个简单的方法是将height设置为screenheight-some_co

  • Electron有API来配置Windows任务栏中的应用程序图标。 支持的有 创建一个 弹出列表, 自定义缩略图和工具栏, 图标叠加, 和所谓的 "闪烁框" 效果, 而且 Electron 还使用应用程序的 dock 图标来实现跨平台功能 比如 最近文档 和 应用进程. Windows Taskbar Electron has APIs to configure the app's icon i

  • 如何在运行时更改程序任务栏按钮右键单击上下文菜单中的标题?我是说这里用红色圈起来的文字。 标题似乎取自程序集标题。我需要在运行时从代码中动态更改标题。我有一个EXE,用户把它看作是许多不同的应用程序--它在运行时读取数据文件,然后大规模地自定义它的外观,包括窗口标题。我还需要自定义这个右键菜单中的标题。没有一个字幕能涵盖所有的内容。如果有必要,我愿意考虑对Windows API的p/invoke调

  • 我想删除Windows 10多桌面任务栏上的窗口。对于Windows 8.1,我使用了ITaskbarList::DeleteTab,效果非常好。 对于Windows 10,此方法也将Windows从任务栏中隐藏,但在它之后,我在所有桌面上看到此窗口。我只想在一个桌面上看到这个窗口。 有人知道在Windows 10中从任务栏隐藏窗口并将此窗口保留在一个桌面上的方法吗? 下面你们可以看到,我在“在W

  • 问题内容: 我想让我的程序显示在任务栏中,但仍然没有传统的Windows寄宿生。我该怎么办?我知道 self.overrideredirect(1) ,但是这从任务栏中删除了我的程序。 这适用于Windows 7。 问题答案: 我没有断言这是“正确”的方法,但是请看这是否对您有用:

  • 问题内容: 我正在制作音乐播放器GUI,但无法使其显示在任务栏或Alt- Tab中。我已将overrideredirect()设置为true以删除边框和标题。我也做到了,这样当用户执行“鼠标单击并拖动”操作时,窗口就会移动。这是代码: 有什么办法可以使其至少出现在Alt-Tab中? 问题答案: 经过一些研究,我发现有一种方法可以执行此操作,但是它涉及使用ctypes,并且是Windows的唯一解决