Taблица treeview в tkinker вылазит за границы окна
Есть небольшой интерфейс на tkinker. в нем три кнопки и таблица из 50 столбцов. При запуске возникает две проблемы:
- Таблица вылезает за рамки окна. Не получается это поправить, ни при методе
pack(), ни при методеgrid(). - Не получается добавить к таблице прокрутку, она просто не появляется при таком коде:
scrollbar = ttk.Scrollbar(window,orient=HORIZONTAL,command=table.xview)
table.configure(xscrollcommand=scrollbar.set)
scrollbar.pack()
Код программы, который есть на данный момент:
from tkinter import *
from tkinter import ttk
window = Tk()
window.config(bg='#C9C5C5')
window.title("Добро пожаловать в приложение PythonRu")
window.geometry('1600x900')
frame_buttons = Frame(window)
frame_buttons.pack(side=LEFT, fill=BOTH)
frame_table = Frame(window)
frame_table.pack(side=RIGHT, fill=BOTH)
start = Button(frame_buttons, text="Старт", width=13, height=2, bg='#B5B2B2', command=lambda: print_reg_values(registers_list, tree))
start.pack(side=TOP)
stop = Button(frame_buttons, text="Стоп", width=13, height=2, bg='#B5B2B2', command=stop_func)
stop.pack(side=TOP)
downdload_file = Button(frame_buttons, text="Загрузить в файл", width=13, height=2, bg='#B5B2B2', command=lambda: download(registers_list))
downdload_file.pack(side=TOP)
columns_list = ['Время']
for i in range(1, 51):
columns_list.append(i)
columns = tuple(columns_list)
table = ttk.Treeview(frame_table, columns=columns, show="headings")
table.pack(fill=BOTH, expand=True)
table.heading("Время", text="Время")
table.column('Время', stretch=NO, width=50)
for i in range(1, 51):
table.heading(i, text=i)
table.column(i, stretch=NO, width=35, anchor=CENTER)
scrollbar = ttk.Scrollbar(window,orient=HORIZONTAL,command=table.xview)
table.configure(xscrollcommand=scrollbar.set)
scrollbar.pack()
window.mainloop()
Вот так выглядит окно с таблицей на данный момент:

Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Скроллбар создавайте в том же фрейме, что и таблицу (frame_table), при размещении указывайте заполнение по горизонтали (fill=X):
scrollbar = ttk.Scrollbar(frame_table,orient=HORIZONTAL,command=table.xview)
scrollbar.pack(fill=X)
table.configure(xscrollcommand=scrollbar.set)
Чтобы была прокрутка по вертикали и горизонтали, удобнее использовать grid вместо pack (иначе или горизонтальный или вертикальный сколлбар будет выходить за размеры таблицы).
Изменения:
table = ttk.Treeview(frame_table, columns=columns, show="headings")
table.grid(row=0, column=0, sticky=NSEW)
...
xscrollbar = ttk.Scrollbar(frame_table,orient=HORIZONTAL,command=table.xview)
xscrollbar.grid(row=1, column=0, sticky=EW)
table.configure(xscrollcommand=xscrollbar.set)
yscrollbar = ttk.Scrollbar(frame_table,orient=VERTICAL,command=table.yview)
yscrollbar.grid(row=0, column=1, sticky=NS)
table.configure(yscrollcommand=yscrollbar.set)
frame_table.grid_columnconfigure(0, weight=1)
frame_table.grid_rowconfigure(0, weight=1)

