#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()