pythonでGUIを簡単に作れる TkEasyGUI を使ってみる
pythonでGUIを作るにはtkinterを使うが、とっても分かり難い。
そこで、簡単にGUIが作れるとウワサの TkEasyGUI を使ってみた。
参考:
使ってみようと思ってはみたものの 何を作れば良いか思いつかなかったので、 以前にtkinterで作ったプログラムを TkEasyGUI を使って書き直して見ることにした。
元にしたのは、
ketsuatsu_GUI.py
これの ketsuatsu_GUI.py
だけを書き換えてみる。
(ketsuatsu_csv2xls.py
はそのまま使用)
ということで、書き直してみた。
TkEasyGUI のインストールは以下を実行するだけ。
pip install TkEasyGUI
TkEasyGUI と pyperclip がインストールされる。
全体を実行するには、上の元ソースのREADMEを参照。
ということで、作ってみたソースがこちら。
元のソースと比べても行数で半分以下になった。
また、イベントによる実行がイベントハンドラで登録するのから
イベントループでイベントを監視するように変更されたので、プログラムの見通しがよくなった。
これを
ketsuatsu_easyGUI.py
import sys
sys.dont_write_bytecode = True # pycacheを作成しない
import os
import TkEasyGUI as eg
# CSV→エクセル変換処理
from ketsuatsu_csv2xls import ketsuatsu_csv2xls
# フォント
# FONT_NAME1 = "MS ゴシック"
FONT_NAME1 = "BIZ UDゴシック"
FONT_NAME2 = "Noto Sans CJK JP"
FONT_SIZE = 12
# レイアウト
layout = [
[
eg.Text( text = "CSV file ",
),
eg.Input( "",
key="-csvfilepath-",
expand_x=True,
),
eg.FileBrowse( button_text = "Browse...",
title="CSV file",
file_types = (('CSV file', '*.csv'), ('all', '*.*')),
),
],
[
eg.Text( "Excel file",
),
eg.Input( "",
key="-excelfilepath-",
expand_x=True,
),
eg.FileBrowse( button_text = "Browse...",
title = "Excel file",
file_types = (('Excel file', '*.xlsx'), ('all', '*.*')),
save_as = True,
),
],
[
eg.Column(
layout=[
[
eg.Button( "Convert",
size = (10,0),
),
eg.Button( "Exit",
size = (10,0),
),
]
],
expand_x=True,
expand_y=True,
text_align="right",
vertical_alignment="bottom",
),
],
]
# CSVファイルからexcelファイルへの変換処理をコールする
def convert_csv2xls(input_filename, output_filename):
execute_flag = True
# パラメータエラーチェック
if len(input_filename) == 0 :
# ファイルが指定されていない
eg.popup(f"入力ファイルを指定してください", title="エラー")
execute_flag = False
# filedialog.askopenfilename()は存在するファイルしか選択できないが
# エディットボックスを直接編集した場合のためにチェック
elif not os.path.isfile(input_filename) :
eg.popup(f"入力ファイルを指定してください", title="エラー")
execute_flag = False
elif len(output_filename) == 0 :
# ファイルが指定されていない
eg.popup(f"出力ファイルを指定してください", title="エラー")
execute_flag = False
# この判定はfiledialog.asksaveasfilename()内で行うが
# エディットボックスを直接編集した場合のためにチェック
elif os.path.isfile(output_filename) :
ret = eg.popup_ok_cancel(f"出力ファイルが存在します\n上書きしますか?", title="確認")
execute_flag = True if ret == 'OK' else False
if execute_flag :
# 変換処理
try:
# CSVファイルからエクセルファイルを作成
ketsuatsu_csv2xls(input_filename, output_filename)
eg.popup(f"変換終了", title="終了")
except Exception as e:
eg.popup(f"{e}", title="エラー")
def main() :
# 使用するフォントの設定
fonts = eg.get_font_list()
target_font_name = ""
target_font_size = FONT_SIZE
if FONT_NAME1 in fonts :
target_font_name = FONT_NAME1
elif FONT_NAME2 in fonts :
target_font_name = FONT_NAME2
# window create
window = eg.Window('血圧 CSV->excel',
size = (600, 150),
font = (target_font_name, target_font_size),
layout = layout
)
# event loop
while window.is_alive():
event, values = window.read()
print("#", event, values)
if event == "Exit" :
break
if event == "Convert" :
# print(values)
input_filename = values['-csvfilepath-']
output_filename = values['-excelfilepath-']
convert_csv2xls(input_filename, output_filename)
# 終了
window.close()
# ======================================================
if __name__ == '__main__':
main()
TkEasyGUI は ドラッグアンドドロップに対応していないので、作成したプログラムも未対応。
issueはあがっていて、作者さんも「It seems we could easily support」と言っているので、近いうちにサポートされるかも。
TkEasyGUI は ttkの使用に対応しているが、使い方によってはうまく動かない。
(今回は eg.Column
の中の eg.Button
で use_ttk_buttons=True
を指定したらエラーになった。
なにか条件があるのかもしれんが。)
とりあえず「お手軽にGUI」が目的なので、テーマで見た目に凝らなくてもいいか、と対応はあきらめた。
さらっと触っただけだけど、tkinterをそのまま使うよりかなり分かりやすい。
が、ちょっと凝ったことをやろうとすると、できなかったりすることも。
その辺は必須かどうか見極めて、あきらめるか、tkinterで泥沼にハマってでも実現するかを決めるしかないか。