Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the all-in-one-seo-pack domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the easy-fancybox domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the urvanov-syntax-highlighter domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the breadcrumb-navxt domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the advanced-ads domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: 関数 _load_textdomain_just_in_time が誤って呼び出されました。lancr ドメインの翻訳の読み込みが早すぎました。これは通常、プラグインまたはテーマの一部のコードが早すぎるタイミングで実行されていることを示しています。翻訳は init アクション以降で読み込む必要があります。 詳しくは WordPress のデバッグをご覧ください。 (このメッセージはバージョン 6.7.0 で追加されました) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114
画像選択のプログラムを使いやすく!! | 診療放射線技師がPythonをはじめました。

画像選択のプログラムを使いやすく!!

DICOMタグを取得するのも、画像処理をするのもまずはファイル選択することから始まります。


一番簡単な方法は、プログラムの中でファイルを指定することなのですが、それでは他のファイルを処理したいときにいちいちコードのファイル名を書き換えなければならないし、保存しているフォルダが違うと余計に面倒ですよね。


それを解決するために以前の記事で「ファイルを一つ選択する方法」「ファイルを複数選択する方法」「フォルダ内のファイルを一括選択する方法」と3回にわたって記事にしてきました。


いずれも、一つのファイル内にコードを記述していたわけですが、コードが長くなってくると目的のコードを探すのが大変になってしまいます。

そこで、今回はファイル選択の部分だけを一つのプログラム(モジュール)として作成し、他のプログラムから呼び出す方法を記載していきたいと思います。



ファイル名を「fileselect.py」として作成します。

ひとまず前3回分のコードを一つにコピペしてみました。

ここで目に着くところが、import~というところが複数出てきていますのでこれを一番先頭に持ってきて、重複している部分を削除してしまいましょう。


そうすると、以下のようになります。

だいぶスッキリとしました。しかし、

def 〇 〇 〇 〇 ():

で始まる関数名がすべて同じになってしまっていますので、これを変更しましょう。

ファイルを一つ選択する場合は、single_fileselect、複数選択するときはmulti_fileselect、フォルダで選択する場合はfolder_fileselectと変更しましょう。


これで完成です。

それでは、実際に使用してみたいと思います。

前回の「マウスを使って画像を切り替える」のコードを使って説明します。

前回のコードは以下になります。

まず、23行目から、29行目のコードは新しく作成したfileselect.pyに記載してありますので削除します。

あと、3行目と4行目のimport文はファイルを選択するダイアログを開く際に必要なライブラリでした。このライブラリはfileselect.pyの中で呼び出しをしますので必要なくなりましたので削除します。

その代わり、fileselect.pyを使用しますので

import fileselect

の一文を追加します。これで、 fileselect.py を使用することができます。

最後に、42行目

filenames = fileselect()

の文をfileselect.pyの中の使用したい関数名を指定すればいいので例えば一つのファイルを選択したいのであれば

filenames = fileselect.single_fileselect()

複数のファイルであれば

filenames = fileselect.multi_fileselect()

フォルダごと選択であれば

filenames = fileselect.folder_fileselect()

とすることで使用することができます。

例えば、複数ファイルでやってみるとコードは以下となります。

少し、コードがすっきりとしましたね。

マウスイベントも同様に別ファイルとして作ってしまえば、かなりすっきりとしますので試してみてください。

それでは。お疲れ様でした。


環境

  • windows10
  • python3.6.1
  • Anaconda custom(64-bit)
  • PyCharm2020.2(Communication Edition)

広告
上新電機 パソコン買取サービス

Categories:

,