如何在文本小部件中从树视图打开文件 python tkinter

发布于 2025-01-14 12:53:23 字数 1846 浏览 5 评论 0原文

我正在创建一个代码编辑器,想要一个侧栏,其中包含用户打开的文件夹文件以及如何通过从文本小部件中的树视图中选择文件来打开文件

我已经为文件创建了侧栏,但仍然遇到了一些如何打开文件的问题从文本小部件中的树视图

这是我的代码

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

I am creating a code editor and want a side bar which contain files of folder open by user and how to open file by selecting file from Treeview in text Widget

I have create side for for file but still I got some problems that how to Open file from treeview in text widget

this is my code

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

勿忘初心 2025-01-21 12:53:23

您只需在 Open_file_from_list_box() 中获取所选项目 iid

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
    ...

You just get the selected item iid inside Open_file_from_list_box():

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

It should be:

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
    ...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文