Search code examples
pythontkintertaskbar

How can i put my taskbar to be always on top?


I want to place my menubar frame to the top of the window like the tkinter's Menu module.

class My_Menu:
    def __init__(self, master, name="Default", expand="full", mode="bar"):
        ##### create the frame #####
        self.menus = {}

        self.master = master
        self.master.columnconfigure(0, weight=1)
        self.master.rowconfigure(0, weight=0)

        self.master_frame = Frame(self.master)
        self.master_frame.grid(row=0, column=0, sticky=NSEW)
        self.master_frame.columnconfigure(0, weight=1)
        self.master_frame.rowconfigure(0, weight=1)

        self.main_frame = Frame(self.master_frame)
        self.main_frame.grid(row=0, column=0, sticky=NSEW)
        self.main_frame.rowconfigure(0, weight=0)

Solution

  • I am not sure if there is any way to do this, but a way around will be to create space to the row and use sticky to put the menu on top always.

    from tkinter import *
    
    class MenuFrame(Frame):
        def __init__(self,parent,*args,**kwargs):
            Frame.__init__(self,parent,*args,**kwargs)
    
            self.b1 = Button(self,text='File',width=50)
            self.b1.grid(row=0,column=0)
    
            self.b2 = Button(self,text='Help',width=50)
            self.b2.grid(row=0,column=1)
    
        def ret_max(self):
            self.update()
            return self.b1.winfo_height()
    
    
    root = Tk()
    
    menu = MenuFrame(root)
    menu.grid(row=0,column=0,sticky='n') # Can move this line in or out of class
    
    height = menu.ret_max()
    root.grid_rowconfigure(0,pad=height) # Make it have extra space of height of button
    
    Button(root,text='Dummy Button').grid(row=0,column=0,sticky='s')
    
    root.mainloop()