Почему панель инструментов не отображается в следующем окне (tkinter)?

#python #tkinter

#питон #tkinter

Вопрос:

При нажатии кнопки (Доступ к базе данных) в главном меню открывается следующее диалоговое окно (класс DB_control) с таблицей из базы данных.

Однако таблица отображается, но панель инструментов к ней не отображается. Хотя метод pack сделал это, или я забыл указать какой-то другой параметр?

Я попытался ввести ширину и высоту для панели инструментов (для tk.Кадр), но это тоже ничего не дало

 class Main(tk.Frame):  def __init__(self,root):  super ().__init__(root)  self.init_main()    def init_main(self):  toolbar = tk.Frame (bg='#d7d8e0', bd=2)  toolbar.pack(side=tk.TOP,fill=tk.X)  self.add_img = tk.PhotoImage(file='IcAdd.gif')   btn_open_dialog = tk.Button(toolbar, command=self.open_dialog, bg='#d7d8e0', bd=5, compound=tk.TOP, image=self.add_img)  btn_open_dialog.pack(side=tk.LEFT, padx=10)  Tooltip(btn_open_dialog, 'DB Access', delay=0,duration=1500)   self.create_pass_img = tk.PhotoImage(file='IcSearch.gif')  btn_create_pass_dialog = tk.Button(toolbar, bg='#d7d8e0', bd=5, compound=tk.TOP, command=self.open_dialog,image=self.create_pass_img)  btn_create_pass_dialog.pack(side=tk.LEFT, padx=10)  Tooltip(btn_create_pass_dialog, 'Create', delay=0, duration=1500)   self.clouse_main_img = tk.PhotoImage(file='IcEdit.gif')  btn_close_dialog = tk.Button(toolbar, bg='#d7d8e0', bd=0, compound=tk.TOP, command = self.destroy,image=self.clouse_main_img)  btn_close_dialog.pack(side=tk.LEFT, padx=10)  Tooltip(btn_close_dialog, 'Cl', delay=0, duration=1500)   def tooltip_on(self):  Tooltip()   def open_dialog(self):  DB_control()  class DB_control(tk.Toplevel):  def __init__(self):  super().__init__(root)  self.init_second()  self.db = db  self.view_records()  self.view = app    def init_second(self):  toolbarTOP = tk.Frame (bg='#a7aeeb', bd=100)  toolbarTOP.pack(side=tk.TOP, fill=tk.X)  self.title ('База данных IRMASH')  self.geometry('500x300 500 350')  self.add_img = tk.PhotoImage(file='')  btn_open_dialog_third = tk.Button(toolbarTOP, command=self.open_dialog_third,bg='#d7d8e0',bd=0, compound=tk.TOP,image=self.add_img)  btn_open_dialog_third.pack(side=tk.LEFT, padx=10)  Tooltip(btn_open_dialog_third, 'Add', delay=0, duration=1500   self.update_img = tk.PhotoImage(file='')  btn_edit_dialog = tk.Button(toolbarTOP,bg='#d7d8e0',bd=0, compound=tk.TOP,command=self.open_update_dialog, image=self.update_img)  btn_edit_dialog.pack(side=tk.LEFT,padx=10)  Tooltip(btn_edit_dialog, 'Edit', delay=0, duration=1500)   self.delete_img = tk.PhotoImage(file='IcDelete.gif')  btn_delete = tk.Button(toolbarTOP,bg='#d7d8e0',bd=0, compound=tk.TOP,command=self.open_delete_dialog, image=self.delete_img)  btn_delete.pack(side=tk.LEFT,padx=10)  Tooltip(btn_delete, 'Delite', delay=0, duration=1500)   self.search_img = tk.PhotoImage(file='IcSearch.gif')  btn_search = tk.Button(toolbarTOP,bg='#d7d8e0',bd=0, compound=tk.TOP,command=self.open_search_dialog, image=self.search_img)  btn_search.pack(side=tk.LEFT,padx=10)  Tooltip(btn_search, 'Search', delay=0, duration=1500)   self.tree = ttk.Treeview(self,columns = ('id', 'name_of_product'), height=20,show='headings')  self.tree.column('id', width=30, anchor=tk.CENTER)  self.tree.column('name_of_product', width=180, anchor=tk.CENTER)  self.tree.heading('id', text = '№')  self.tree.heading('name_of_product', text='Name')  self.tree.pack(side=tk.LEFT)   scroll=tk.Scrollbar(self, command=self.tree.yview)  scroll.pack(side=tk.LEFT, fill=tk.Y)  self.tree.configure(yscrollcommand=scroll.set)  if __name__=="__main__":  root = tk.Tk()   db = DB()   app = Main(root)  app.pack()  root.title ("NoneName")  root.geometry("300x89 100 100")  root.resizable(False, False)  root.mainloop()  

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

1. Нет, мне кажется, я нашел свою проблему: я попытался использовать в классе DB_control(tk. На верхнем уровне), а затем для панели инструментов я использовал tk. Кадр и именно поэтому его вообще не было видно.

2. Если я использую tk. Снова верхний уровень для панели инструментов, она откроется в третьем окне, и мне нужно, чтобы и таблица, и панель инструментов находились в одном окне.

3. Вам нужно передать self в качестве первого аргумента при создании рамки панели инструментов: toolbarTOP = tk.Frame(self, ...) .

4. О да! это действительно работает, спасибо, я пробовал то же самое, но с self.tk)