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

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

这适用于 Windows 7。

【问题讨论】:

    标签: python windows-7 tkinter


    【解决方案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()
    

    【讨论】:

    • 自几周以来一直在寻找这个完美的作品!
    猜你喜欢
    • 2015-09-16
    • 2020-04-13
    • 2011-11-12
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    相关资源
    最近更新 更多