Сортировка записи ttk.treeview - PullRequest
0 голосов
/ 13 марта 2019

Я новичок в Python, пожалуйста, помогите мне, как я могу сортировать строки в виде дерева, я хочу прочитать данные из Excel и показать их в отсортированном списке в виде дерева теперь его вывод похож на фотографию, которую я хочу отсортировать по id

enter code here 
def show_data():
   wb = openpyxl.load_workbook('F:\python project\Form1.xlsx')
   sheet = wb.get_sheet_by_name('Sheet1')
   lb.delete(*lb.get_children())
   for row in sheet.iter_rows(min_row=1, min_col=0):
        lb.insert('', 'end', values=[cell.value for cell in row])
cols = ('name', 'ID', 'Mark')
lb=ttk.Treeview(frame1, columns=cols, show='headings')
for col in cols:
    lb.heading(col, text=col)
Button(frame2, text='show DB', command=show_data).grid(row=0, column=2, 
sticky=W, pady=4)

введите описание изображения здесь

1 Ответ

0 голосов
/ 18 марта 2019

Я почти уверен, что в вставленной ссылке уже был ответ, но сортировка кажется неупорядоченной, если столбец для сортировки - это числа. Вот как это правильно отсортировать.

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

class MyTree(ttk.Treeview):
    def __init__(self,master,**kw):
        ttk.Treeview.__init__(self,master,**kw)
        header = ("ID", "Column 2","Column 3")
        width = (100,100,100)
        self["columns"] = header
        for i in range(len(header)):
            self.column(header[i], width=width[i], anchor="w")
            self.heading(header[i], text=header[i], anchor='w')

        self.heading("ID", text="ID", command=lambda _col="ID": self.tree_sort(self, _col, False))

    def tree_sort(self, tv, col, reverse):
        l = [(int(tv.set(k, col)), k) for k in tv.get_children('')]
        l.sort(reverse=reverse)

        for index, (val, k) in enumerate(l):
            tv.move(k, '', index)

        tv.heading(col, command=lambda: self.tree_sort(tv, col, not reverse))

tree = MyTree(root,height=20)
tree.pack()

for i in range(50):
    tree.insert("",0,text=f"Test{i}",values=(i,f"Test String {i}",f"Amount {i}"))

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...