WedX - журнал о программировании и компьютерных науках

Treeview отстает на один столбец?

Я не могу в жизни найти какой-либо пост или документацию, объясняющую, почему заголовок Treeview отличается на один столбец от остальных данных.

Даже документацию я found показывает эту проблему в примере, но не описывает проблему.

import tkinter as tk
import tkinter.ttk as ttk
import random

n, m = 40, 10
table = []
for i in range(n):
    line = []
    # line.append('') 
    # This adds a blank string to start of row data to off set the data.
    # It is my current work around but does not look great.
    for j in range(m):
        line.append(random.randint(0, 999))
    table.append(line)


class Demo(tk.Tk):
    def __init__(self):
        super().__init__()

        tree = ttk.Treeview(self)
        tree.pack()
        for i in range(n):
            tree.insert('', 'end', text=table[i][0], values=table[i][1:])

        tree['columns'] = list(range(m - 1))
        headings = list('ABCDEFGHI')
        for j in range(m - 1):
            tree.column(j, width=50, anchor='e')
            tree.heading(j, text=headings[j])


if __name__ == '__main__':
    Demo().mainloop()

Как видите, заголовки смещены на одну колонку. Я не могу понять, почему это так и как это исправить.

Мне удалось найти плохой обходной путь, который добавляет пустую строку к началу данных строки, чтобы она соответствовала правильным заголовкам, но это не может быть правильным или лучшим способом исправить это.

Я что-то упустил здесь? Это нормально для Treeview?

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


  • как я знаю, первый столбец имеет особое значение - его можно использовать для отображения дерева с вложенными элементами - как на изображении в tkdoc - и может потребоваться специальный метод для установки заголовка. 01.05.2021
  • наверное tree.heading('#0', text='Name') 01.05.2021
  • Установите show="headings" в Treeview(...). 01.05.2021

Ответы:


1

Насколько я знаю, первый столбец имеет особое значение - его можно использовать для отображения дерева с вложенными элементами - как на изображении в tkdoc - и может потребоваться специальный метод для установки заголовка.

    tree.heading('#0', text='Hello')

Результат:

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

Вы также можете использовать "#1", "#2" и т. д. для установки других заголовков.

Вы можете использовать f'#{j}' в цикле.

    headings = list('ABCDEFGHIJ')
    for j in range(m):
        tree.column(f'#{j}', width=50, anchor='e')
        tree.heading(f'#{j}', text=headings[j])

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


Полный рабочий код:

import tkinter as tk
import tkinter.ttk as ttk
import random

n, m = 40, 10
table = []
for i in range(n):
    line = []
    # line.append('') 
    # This adds a blank string to start of row data to off set the data.
    # It is my current work around but does not look great.
    for j in range(m):
        line.append(random.randint(0, 999))
    table.append(line)


class Demo(tk.Tk):
    def __init__(self):
        super().__init__()

        tree = ttk.Treeview(self)
        tree.pack()
        for i in range(n):
            tree.insert('', 'end', text=table[i][0], values=table[i][1:])

        tree['columns'] = list(range(m - 1))
        headings = list('ABCDEFGHIJ')
        for j in range(m):
            tree.column(f'#{j}', width=50, anchor='e')
            tree.heading(f'#{j}', text=headings[j])

        #tree.heading('#0', text='Hello')

if __name__ == '__main__':
    Demo().mainloop()

Документ: Идентификаторы столбцов

01.05.2021
  • Спасибо. Решение f'#{j}', вероятно, будет тем, что мне нужно. Я буду работать в этот понедельник, когда вернусь на работу. Первоначально я выполнял всю свою работу, используя метки, и все работало нормально, но при добавлении нескольких сотен строк и более 30 столбцов это начало замедлять работу, поэтому мне пришлось переключиться на древовидную структуру. 01.05.2021
  • если вы хотите хранить данные в pandas.DataFrame, вы можете использовать pandastable. Он использовался для создания DataExplorer — есть изображения, чтобы увидеть, что вы можете создать. с pandastable 01.05.2021
  • Это выглядит предпочтительнее. Можно ли загрузить таблицу pandas в фреймы tkinter? 02.05.2021
  • модуль pandastable построен с использованием tkinter специально для использования с tkinter - у меня есть примеры в моем блоге Примеры Tkinter PandasTable, поскольку официальная документация содержит только базовые примеры в Примеры кода< /а> 02.05.2021
  • О, это выглядит захватывающе. Я работаю с большими наборами данных, и эти таблицы Pandas выглядят очень полезными. Большое спасибо за ссылки и помощь :D 02.05.2021
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]