Как сделать так, чтобы значок записей строк tkinter Treeview отображался по умолчанию?

#python #tkinter #treeview

Вопрос:

У меня странное поведение в виде дерева, которое я не могу разрешить.

Я создал виджет, используя ttk.Frame виджет и сетку a ttk.Treeview в нем в качестве его дочернего элемента. В столбце #0 показано дерево каталогов. Для каждой записи строки, т. е. узла дерева, появится значок. Был использован параметр open=True в .insert() методе.

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

Однако, когда этот же виджет импортируется в другой скрипт и добавляется в ttk.PanedWindow виджет, значки в представлении дерева появляются не сразу. Значки будут отображаться только тогда, когда запись строки Treeview будет открыта щелчком по ней. Второй щелчок закрыл бы запись строки Treeview, и значки исчезли бы.

Я бы хотел, чтобы значки в ttk.Treeview нем отображались по умолчанию. Как мне это сделать?

Комментарии:

1. Можем мы посмотреть ваш код?

2. @Atlas435 Я наконец — то нашел причину этого явления. Когда я настроил стиль ttk.Treeview виджета в другом скрипте, я обнаружил, что в значении background параметра отсутствует # символ. Явление ttk.Treeview , когда значки не отображаются по умолчанию, было вызвано неправильным синтаксисом в background опции.

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

4. @SylvesterKruin опубликовал ответ с тестовым кодом, который воспроизводит это явление.

Ответ №1:

Я нашел причину этого явления. Когда я настроил стиль ttk.Treeview виджета в другом сценарии, я обнаружил, что в значении параметра » Фон » отсутствует # символ. Явление ttk.Treeview , когда значок не отображается по умолчанию, вызвано неправильным синтаксисом в значении background параметра.

ОС: Linux

Тестовый код, воспроизводящий явление, вызванное неправильным синтаксисом.

 #!/usr/bin/python3 # -*- coding: utf-8 -*-  import tkinter as tk import tkinter.ttk as ttk   class App(ttk.Frame):   def __init__(self, parent=None, *args, **kwargs):  super().__init__(parent)  self.parent = parent   # Create Treeview  self.tree = ttk.Treeview(self, column=('A', 'B'), selectmode='none', height=7)  self.tree.grid(row=0, column=0, sticky='nsew')   # Setup column heading  self.tree.heading('#0', text=' Pic directory', anchor='center')  self.tree.heading('#1', text=' A', anchor='center')  self.tree.heading('#2', text=' B', anchor='center')  # #0, #01, #02 denotes the 0, 1st, 2nd columns   # Setup column  self.tree.column('A', anchor='center', width=100)  self.tree.column('B', anchor='center', width=100)   # Insert image to #0  # change to your file path  self._img = tk.PhotoImage(file="./imagename.png")  self.tree.insert('', 'end', text="#0's text", image=self._img,  value=("A's value", "B's value"))   if __name__ == '__main__':  # Works  root = tk.Tk()  root.geometry('400x180 300 300')  app = App(root)  app.grid(row=0, column=0, sticky='nsew')  root.rowconfigure(0, weight=1)  root.columnconfigure(0, weight=1)  root.mainloop()   # Don't Works - syntax error in value of background causing missing icon  # in Treeview.  root = tk.Tk()  root.geometry('400x180 300 300')  style = ttk.Style()  style.configure('Treeview', background='303495') # should be '#303495'  app = App(root)  app.grid(row=0, column=0, sticky='nsew')  root.rowconfigure(0, weight=1)  root.columnconfigure(0, weight=1)  root.mainloop()