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