使 Tkinter 窗口显示在任务栏中

Posted

技术标签:

【中文标题】使 Tkinter 窗口显示在任务栏中【英文标题】:Making Tkinter windows show up in the taskbar 【发布时间】:2011-05-03 05:39:06 【问题描述】:

我希望我的程序显示在任务栏中,但仍然没有传统的 windows 边界。我该怎么办?我知道self.overrideredirect(1),但这会将我的程序从任务栏中删除。

这适用于 Windows 7。

【问题讨论】:

【参考方案1】:

我没有声称这是“正确”的做法,但看看这是否适合你:

try:
    from tkinter import *
except ImportError:
    from Tkinter import *


class NewRoot(Tk):    
    def __init__(self):
        Tk.__init__(self)
        self.attributes('-alpha', 0.0)

class MyMain(Toplevel):
    def __init__(self, master):
        Toplevel.__init__(self, master)
        self.overrideredirect(1)
        self.attributes('-topmost', 1)
        self.geometry('+100+100')
        self.bind('<ButtonRelease-3>', self.on_close)  #right-click to get out

    def on_close(self, event):
        self.master.destroy()


if __name__ == '__main__':

    root = NewRoot()
    root.lower()
    root.iconify()
    root.title('Spam 2.0')

    app = MyMain(root)
    app.mainloop()

【讨论】:

只需创建一个新的普通根并将关闭按钮附加到主根。不是永久的解决方案,但很好。【参考方案2】:

您可以在根对象下添加一个***窗口,使根不可见,然后处理图标事件以隐藏或显示***窗口。

root = tkinter.Tk()
top = tkinter.Toplevel(root)
top.overrideredirect(1) #removes border but undesirably from taskbar too (usually for non toplevel windows)
root.attributes("-alpha",0.0)

#toplevel follows root taskbar events (minimize, restore)
def onRootIconify(event): top.withdraw()
root.bind("<Unmap>", onRootIconify)
def onRootDeiconify(event): top.deiconify()
root.bind("<Map>", onRootDeiconify)

window = tkinter.Frame(master=top)
window.mainloop()

【讨论】:

自几周以来一直在寻找这个完美的作品!

以上是关于使 Tkinter 窗口显示在任务栏中的主要内容,如果未能解决你的问题,请参考以下文章

如何使Delphi做的程序不显示在任务栏中

如何在 guizero/tkinter python 3 中将图标添加回任务栏?

使浏览器窗口在任务栏中闪烁

如何在任务栏中显示 QMainWindow

delphi2007如何让程序不在任务栏中隐藏和显示?

Win32:是不是可以显示窗口但将其从任务栏中隐藏?