メソッド間にて、取得情報の受け渡しをしたい
pythonにてエクスプローラーより選択した複数ファイルパスを取得する処理を作成しておりました。
その際、関数内での取得した値を複数の関数で再利用するためには、クラスというものを使用すると知りました。
ですが、簡易的な記述方法しか理解していないため、今回の処理で難航している状況です。
そもそもこの処理がクラスによって解決するべき問題なのかすら理解出来ていませんが、ご助言ただければ幸いです。
クラスを利用し、取得情報の受け渡しはどのような記述になるか
個人としてはクラスやインスタンスについて調べました。
得られた情報では、引数を指定して計算結果を他のメソッドに受け渡す、という流れは理解しました。
しかし、メソッド内で要素を取得し、逆に受け渡すという処理につまった状態です。
エラーコードも引数についての指摘がされているという事までは分かるのですが、**こちら側から指定する要素がないのに引数を指定する?**という状態です。
そもそも、クラスインスタンス以前の箇所もございます。
どこが問題なのか漠然とした状況であり、学習箇所を見直す機会としてひと言頂ければ幸いです。
TypeError: start_btn() missing 1 required positional argument: 'search_field'
動作内容
def btnRef エクスプローラー起動 要素取得
def btnStart 要素受け渡し後 動作開始
該当のソースコード
おそらく引数の指定は、めちゃくちゃになっているかと思います。
python
1 2# ボタン押下時判定 3class btn_status: 4 5 # initは記載必要? 6 def __init__(self, search_field): 7 pass 8 9 # 【1/2】ファイルパス取得 10 # OSエクスプローラから、複数のファイルパスを取得 11 # 他メソッドで利用できるように戻り値に指定 12 def get_file_path(self): 13 fTyp = [('', '*')] 14 iDir = os.path.abspath(os.path.dirname(__file__)) 15 filepaths = filedialog.askopenfilenames(filetypes=fTyp, initialdir=iDir) 16 # 取得したファイルパス 17 search_field = filePath.set(filepaths) 18 # ファイルパス:search_fieldを戻り値に指定 19 return self.search_field 20 21 # 【2/2】取得したファイル名を表示する 22 def start_btn(self): 23 print(self.search_field) 24 25h = btn_status() 26 27# 実行ボタン部分 28# btnStart = ttk.Button(frameBtn, text='はじめる', command=h.start_btn) 29# btnRef = ttk.Button(root, text=u'参照', command=h.get_file_path) 30
試したこと
self部分の改変
記述方法自体の修正
追記
■動作イメージ図
ご回答頂いた流れで動作させてみたのですが、処理の部分で気になる点が発生してしまいました。
start_btn()を実行した際に、btnRef_clicked()を呼び出す部分です。
戻り値による受け渡しの流れとしては当然なのですが、処理として見てみると2度同じ動作をしてしまう形になってしまっております。
その上で気になる点が浮かびました
1.クラスを利用すれば、他のメソッドから戻り値のみの要素を取得出来るのでしょうか?
今回の点ですと、search_fieldのリストが欲しいのであって、ファイルパス取得動作が余計に付いてしまっています。
自分の中ではクラス=変数・リストを関数感で共有する方法と認識していました。
そもそもの認識がずれてしまっている可能性があります。
2.現状の問題点を調べる、書籍や関連サイトについてありましたらご助言頂きたいです。
自身の問題点を見直すために、調べ直してみようと思います。
あまりにも漠然とした情報収集のため、関連した分野の記事などがありましたら、非常に助かります。
用語の把握も疎いため、上手く内容を伝達出来ずに申し訳ございません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/30 15:18
2019/11/30 17:27
2019/12/01 13:43