rectangletangle
rectangletangle

Reputation: 52921

Making Tkinter windows show up in the taskbar

I want a program of mine to show up in the taskbar, but still not have the traditional windows boarder. How can I go about this? I know of self.overrideredirect(1), however this removes my program from the taskbar.

This is for Windows 7.

Upvotes: 7

Views: 11013

Answers (2)

shuji
shuji

Reputation: 7527

You could add a toplevel window under the root object, make root invisible and then handle the icon events to hide or show the toplevel window.

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()

Upvotes: 9

noob oddy
noob oddy

Reputation: 1339

I make no claim about this being the 'correct' way to do it, but see if this works for you:

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()

Upvotes: 10

Related Questions