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