Как я могу сделать так, чтобы моя панель задач всегда была сверху?

#python #tkinter #taskbar

Вопрос:

Я хочу разместить рамку меню в верхней части окна, как в модуле меню tkinter.

 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)
 

Комментарии:

1. Я почти уверен, что Вы уже задавали этот вопрос, по крайней мере, один раз.

2. Как вы пользуетесь My_Menu ? Не могли бы вы привести нам полный пример, пожалуйста?

3. Я мог бы только предложить наследовать от фрейма и использовать .place() или, может быть, другие методы компоновки подойдут, но фрейм очень поможет (несколько, один для меню, один для остальных виджетов).

4. Я, честно говоря, не уверен, возможно ли это. Но вы можете root.grid_rowconfigure и добавить дополнительное пространство в первый столбец, чтобы остальные вставленные элементы выглядели нормально(??).

5. @pixelshash Хорошо, почему бы вам просто не добавить 1 ко всем row значениям, когда вы размещаете другие виджеты в сетке? Единственный способ, который я могу придумать, — это создать свой собственный Tk класс, который может обрабатывать меню.

Ответ №1:

Я не уверен, есть ли какой-либо способ сделать это, но обходной путь будет заключаться в том, чтобы создать пространство для строки и всегда использовать sticky меню сверху.

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