3

ファイルマネージャーを実装しようとしましたが、TotalCommander'eで発生したように、指定されたディレクトリを表示するためにTreeviewを使用すると問題が発生します

コードのスニペットを次に示します。


from tkinter import *
from tkinter import ttk

class FileBrowser(Frame):

    def __init__(self, root):
        Frame.__init__(self, root)
        self.master.title('Файловый менеджер')
        self.master.geometry('1024x768')

        listframe = Frame(root, bd=5)
        listframe.pack(side='top', fill=BOTH, expand=1)

        self.filedirlist = ttk.Treeview(listframe)
        self.filedirlist["columns"]=("#1", "#2", "#3", "#4")
        self.filedirlist.column("#0", width=175, minwidth=100)
        self.filedirlist.column("#1", width=100, minwidth=100)
        self.filedirlist.column("#2", width=100, minwidth=100)
        self.filedirlist.column("#3", width=100, minwidth=100)
        self.filedirlist.column("#4", width=100, minwidth=100)
        self.filedirlist.heading("#0", text="Имя")
        self.filedirlist.heading("#1", text="Режим")
        self.filedirlist.heading("#2", text="Частота, МГц")
        self.filedirlist.heading("#3", text="Размер, Мб")
        self.filedirlist.heading("#4", text="Комментарий")
        self.filedirlist.pack(side='top', fill=BOTH, expand=1)
        listsb = Scrollbar(self.filedirlist,
                orient=HORIZONTAL, command=self.filedirlist.xview)
        listsb.pack(side=BOTTOM, fill=X)

        self.listbuttonopen = Button(listframe,
                text='Open').pack(side='left', padx='10', pady='5')
        self.listbuttondelete = Button(listframe,
                text='Delete').pack(side='left', padx='10', pady='5')
        self.listbuttonload = Button(listframe,
                text='Load').pack(side='left', padx='10', pady='5')

    if __name__=='__main__':
        root = Tk()
        FileBrowser(root).pack()
        root.mainloop()

フォルダーを表示するときは、列 "Имя" と "Комментарий" のみがアクティブになる必要があり、残りの列は、選択したフォルダーの内容がアクティブになる場合にのみアクティブになります。

実際の質問: Treeview'ra を使用して実装することは可能ですか?)

PS私の英語でごめんなさい)

4

1 に答える 1

0

テーブルの特定の列を変更するには、valuesキーワード ofを使用できます。tkinter.ttk.Treeview.insertすでにtextオプションを使用していますが、後でvalues=("value1", "value2", "value3")他の列の表示内容を指定するために使用します。例えば:

Take your Treeview `filedirlist`:
----------------------------------------------
|   Name   |   Type   |   Size   |   Notes   |
----------------------------------------------
|                                            |
|                                            |
|                                            |
----------------------------------------------

filedirlist.insert("", tkinter.END, "element-id1", text="example1")
----------------------------------------------
|   Name   |   Type   |   Size   |   Notes   |
----------------------------------------------
| example1                                   |
|                                            |
|                                            |
----------------------------------------------

filedirlist.insert("", tkinter.END, "element-id2", text="example2", values=("type2", "size2", "notes2"))
----------------------------------------------
|   Name   |   Type   |   Size   |   Notes   |
----------------------------------------------
| example1                                   |
| example2   type2      size2      notes2    |
|                                            |
----------------------------------------------

お役に立てれば!

于 2014-04-19T16:20:50.433 に答える