Я хочу загрузить и изменить содержимое листов Excel. Я использую tkinter TreeView для отображения данных с помощью openpyxl.
Проблема в том, что всякий раз, когда я открываю лист Excel, размер которого превышает размер кадра, он выходит за пределы окна и его невозможно увидеть. Я использовал полосу прокрутки, надеясь, что смогу с ее помощью прокручивать данные, но это тоже не работает.
Ниже приведен тестовый код только для этой цели:
from tkinter import *
from tkinter import ttk
import openpyxl
file_name = "test1.xlsx"
def open_excel(file_name):
wb = openpyxl.load_workbook(file_name)
sheet = wb.active
list_values = list(sheet.values)
bom_tree.delete(*bom_tree.get_children())
bom_tree["column"] = list(list_values[0])
for col in list_values[0]:
bom_tree.column(col, stretch=NO, minwidth=25, width=200)
bom_tree.heading(col, text=col)
for val in list_values[1:]:
# print(val)
bom_tree.insert('', "end", values=val)
root= Tk()
root.title('test2')
root.geometry("1000x600")
#create treeview frame
tree_frame= LabelFrame(root, text = "tree frame" ,padx=50, pady=50, width=1000)
tree_frame.pack(padx=20,pady=20)
bom_tree = ttk.Treeview(tree_frame, show = "headings", height=10)
bom_tree.grid(row=0,column=0, padx=10)
#scroll bars
tree_scroll_vertical = ttk.Scrollbar(tree_frame, orient=VERTICAL, command=bom_tree.yview)
tree_scroll_vertical.grid(row=0,column=1, sticky=NS)
bom_tree.configure(yscrollcommand=tree_scroll_vertical.set)
tree_scroll_horizontal = ttk.Scrollbar(tree_frame, orient=HORIZONTAL, command=bom_tree.xview)
tree_scroll_horizontal.grid(row=1,column=0, sticky=EW)
bom_tree.configure(xscrollcommand=tree_scroll_horizontal.set)
open_excel(file_name)
root.mainloop()
Вот скриншот вывода:
Я использую сетку, поскольку она потребуется для моего приложения, но я также пытался использовать упаковку, но до сих пор не могу найти правильную настройку.






зависит от вашего намерения для приложения.
если вы хотите, чтобы ваше приложение имело определенный предел столбцов, вы можете просто увеличить размер экрана.
вы могли бы реализовать прокрутку в древовидном представлении Excel, но, поскольку вы сказали, что это не удалось (не говоря, почему это не удалось), вместо этого вы можете просто использовать 2 кнопки и каждый раз показывать только определенное количество столбцов.
и если ни один из этих вариантов вам не подходит, объясните, какую цель вы преследуете с помощью приложения.
Поскольку древовидное представление помещается в столбец 0, вы можете добавить tree_frame.grid_columnconfigure(0, weight=1), чтобы древовидное представление вписывалось в доступное горизонтальное пространство.
Результат:
Спасибо за ответ. Я пытался использовать конфигурацию столбца для древовидного представления, а не для родительского фрейма, в этом и была проблема. В любом случае спасибо за ваше время.
Спасибо за время. Я добавил полосы прокрутки в код, но горизонтальная полоса прокрутки была недоступна, поскольку, я думаю, она появляется только в том случае, если есть что прокручивать. В любом случае решение, предоставленное @acw1668, сработало, и я знаю, что делал неправильно. Спасибо.