Taблица treeview в tkinker вылазит за границы окна

Рейтинг: 0Ответов: 1Опубликовано: 29.01.2023

Есть небольшой интерфейс на tkinker. в нем три кнопки и таблица из 50 столбцов. При запуске возникает две проблемы:

  1. Таблица вылезает за рамки окна. Не получается это поправить, ни при методе pack(), ни при методе grid().
  2. Не получается добавить к таблице прокрутку, она просто не появляется при таком коде:
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()

Вот так выглядит окно с таблицей на данный момент: Скрин окна

Ответы

▲ 0Принят

Скроллбар создавайте в том же фрейме, что и таблицу (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)

Скриншот с горизонтальной и вертикальной прокруткой