このツリービューを使用しているのですが、path変数のファイルパスの中で特定の拡張子ファイルだけ表示させたいです。
targetPattern = path + '' + '*.mp4'
glob.glob(targetPattern)
でできるみたいなのをネットでみつけたのでやってみようとしたのですが、
うまくできませんでした。
どなたかご教授ください。
import os import tkinter import tkinter as tk import tkinter.ttk as ttk from tkinter import filedialog import glob import gs_kanja_kaiseki id_path = '222' aaa = os.path.join(r'C:\APP\data\Video_data', id_path) class PathTreeFrame2(ttk.Frame): def __init__(self, master,txt_damy2,path=aaa): super().__init__(master) ## 行った内容 targetPattern = path + '\' + '*.mp4' glob.glob(targetPattern) print(glob.glob(targetPattern)) ## 行った内容 self.root_path = os.path.abspath(path) self.nodes = {} self.create_widgets() self.txt_damy2 = txt_damy2 def create_widgets(self): """ウィジェットの作成""" # ツリービューの作成とスクロール設定 self.tree = ttk.Treeview(self) ysb = ttk.Scrollbar( self, orient=tk.VERTICAL, command=self.tree.yview) self.tree.configure(yscroll=ysb.set) # レイアウト。スクロールバーは拡大させない self.tree.grid(row=0, column=0, sticky=(tk.N, tk.S, tk.E, tk.W)) ysb.grid(row=0, column=1, sticky=(tk.N, tk.S)) self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) # ディレクトリを開いた際と、ダブルクリック(ファイル選択)を関連付け self.tree.bind('<<TreeviewOpen>>', self.open_node) self.tree.bind('<Double-1>', self.choose_file) # ルートのパスを挿入 self.insert_node('', self.root_path, self.root_path) def insert_node(self, parent, text, abspath): """Treeviewにノードを追加する args: parent: 親ノード text: 表示するパス名 abspath: 絶対パス """ # まずノードを追加する node = self.tree.insert(parent, 'end', text=text, open=False) # ディレクトリならば、空の子要素を追加し開けるようにしておく if os.path.isdir(abspath): self.tree.insert(node, 'end') self.nodes[node] = (False, abspath) else: self.nodes[node] = (True, abspath) def open_node(self, event): """ディレクトリを開いた際に呼び出される self.nodes[node][0]がFalseの場合はまだ開かれたことがないと判断し、 そのディレクトリ内のパスを追加する 一度開いたか、又はファイルの場合はself.nodes[node][0]はTrueになります """ node = self.tree.focus() already_open, abspath = self.nodes[node] # まだ開かれたことのないディレクトリならば if not already_open: # 空白の要素が追加されているので、消去 self.tree.delete(self.tree.get_children(node)) # ディレクトリ内の全てのファイル・ディレクトリを取得し、Treeviewに追加 for entry in os.scandir(abspath): self.insert_node( node, entry.name, os.path.join(abspath, entry.path) ) # 一度開いたディレクトリはTrueにする self.nodes[node] = (True, abspath) def choose_file(self, event): """ツリーをダブルクリックで呼ばれる""" node = self.tree.focus() # ツリーのノード自体をダブルクリックしているか? if node: already_open, abspath = self.nodes[node] if os.path.isfile(abspath): print(abspath) def update_dir(self, event=None): """ツリーの一覧を更新する""" self.create_widgets() def change_dir(self, event=None): """ツリーのルートディレクトリを変更する""" dir_name = filedialog.askdirectory() if dir_name: self.root_path = dir_name self.create_widgets()
うまくできないというのはどうなるんでしょうか
質問のコードはご自身が作成されたものですか?
コードは 見ておりませんが
【Python】startswith・endswith 指定した文字列で始まるか?終わるか?
https://pg-chain.com/python-startswith-endswith
が 参考になりませんか?
ツリービューがうまく表示されなくなりました。
コードはほぼネットから拾ってきたものです。
上記のURLは内容と違う気がします。
Beginner_ABCさん
すみません。
参考になりまそうです。
もう片方のファイルより、掲題のコードやクラスを呼び出す際にはどの様に呼び出していますか?
また、21行目のself.root_pathはご自身の想定通りのpathになっていますか?一度printして確認してみてほしいです。
コードが実行できません、実行できるコードの掲載をお願いします。
- SyntaxError ## 行った内容 のインデント文字
- ModuleNotFoundError gs_kanja_kaiseki
- PathTreeFrame2を呼び出す起動部分のコードが有りません
回答1件
あなたの回答
tips
プレビュー