Как открыть файл из дерева в текстовом виджете python tkinter

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

У меня есть сторона для файла, но все же у меня есть некоторые проблемы с тем, как открыть файл из дерева в текстовом виджете.

это мой код

from tkinter import*
from tkinter import ttk
import os
from tkinter.filedialog import askdirectory
def Open():
    for i in tree.get_children():
        tree.delete(i)
    path = askdirectory()
    abspath = os.path.abspath(path)
    root_node = tree.insert('', 'end', text=abspath, open=True)
    process_directory(root_node,abspath)
def process_directory( parent, path):

        for p in os.listdir(path):
            abspath = os.path.join(path, p)
            isdir = os.path.isdir(abspath)
            oid = tree.insert(parent, 'end', text=p, open=False)
            if isdir:
                process_directory(oid, abspath)
def Open_file_from_list_box(value):
    global file
    file = tree.selection()
    filepath = os.path.join(value,file)
    root.title(filepath + "                                                                                                                                            Code Editor")
    editor.delete(1.0,END)
    with open(filepath,"r") as f:
        editor.insert(1.0,f.read())
root = Tk()
root.geometry("1550x850+0+0")
Button(root,text = "Open",command=Open).pack()
frame = Frame(root)
tree = ttk.Treeview(frame)
tree.pack(expand=True,fill=Y)
path = "."
tree.heading('#0', text=path, anchor='w')
abspath = os.path.abspath(path)
root_node = tree.insert('', 'end', text=abspath, open=True)
process_directory(root_node, abspath)
frame.pack(side=LEFT,fill=Y)
frame = Frame(root)
frame.pack(side=LEFT,expand=True,fill=BOTH)
editor = Text(frame,font = "Consolas 15")
editor.pack(expand=True,fill=BOTH)

tree.bind("<<TreeviewSelect>>",lambda event=None:Open_file_from_list_box(path))

root.mainloop()

Попробуйте использовать Treeview вместо Listbox, как ответ в этом вопрос и этом вопрос.

acw1668 16.03.2022 06:07

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

Coder 16.03.2022 08:56

Опубликуйте, что вы пробовали с помощью Treeview, иначе мы не можем помочь.

acw1668 16.03.2022 09:25

Сэр, опубликуйте мою попытку выше, я изменил свой пост, пожалуйста, помогите мне с моей проблемой

Coder 16.03.2022 14:01
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы просто получаете выбранный предмет iid внутри Open_file_from_list_box():

def Open_file_from_list_box(value):
    global file
    file = tree.selection() # return item iid, not the file name
    ...

Должен быть:

def Open_file_from_list_box(value):
    global file
    item_id = tree.selection()
    file = tree.item(item_id, 'text') # get the filename from 'text' option
    ...

Другие вопросы по теме