質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

1回答

1764閲覧

python 指定した拡張子のファイルだけ表示したい

MATLIB

総合スコア27

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2020/10/15 13:37

編集2020/10/15 23:34

このツリービューを使用しているのですが、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()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/10/15 13:53

うまくできないというのはどうなるんでしょうか
meg_

2020/10/15 14:16

質問のコードはご自身が作成されたものですか?
MATLIB

2020/10/15 23:37

ツリービューがうまく表示されなくなりました。 コードはほぼネットから拾ってきたものです。
MATLIB

2020/10/15 23:39

上記のURLは内容と違う気がします。
MATLIB

2020/10/16 01:16

Beginner_ABCさん すみません。 参考になりまそうです。
nto

2020/10/16 02:59 編集

もう片方のファイルより、掲題のコードやクラスを呼び出す際にはどの様に呼び出していますか? また、21行目のself.root_pathはご自身の想定通りのpathになっていますか?一度printして確認してみてほしいです。
teamikl

2020/10/16 03:12

コードが実行できません、実行できるコードの掲載をお願いします。 - SyntaxError ## 行った内容 のインデント文字 - ModuleNotFoundError gs_kanja_kaiseki - PathTreeFrame2を呼び出す起動部分のコードが有りません
guest

回答1

0

ベストアンサー

「行った内容」が自分で追加されたコードだと思いますが

  • glob について、単体での使い方や違いを調べてみてください。
  • 目的のファイル一覧が所得できるようになったら、それをGUIに表示する方法を調べましょう。

現状のコードでは os.scandir を使いファイル一覧を所得してます。

この場合2通りの方法が考えられます、

  • os.scandir を使い、個々のファイルの拡張子をチェックする
  • glob を使い、特定の拡張子に一致したファイル一覧を得る

python

1# ディレクトリ内の全てのファイル・ディレクトリを取得し、Treeviewに追加 2for entry in os.scandir(abspath): 3 4 # TODO: ここで拡張子をチェックする 5 6 self.insert_node( 7 node, entry.name, os.path.join(abspath, entry.path) 8 )

但し、glob で得られるのは os.scandir の時と違い
ファイルのパス(文字列)なので、後続するコードはそれに合わせて変更は必要です。

投稿2020/10/16 03:17

teamikl

総合スコア8760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問