こんにちは、fuyutsuki(@Fuyutsuki)です。
Pythonでユーザー目線のGUIアプリを作成したいと思った事はありませんか?
そのような時に活躍するのがpython標準ライブラリの「Tkinter」です。
ライセンスの心配がない・コードのテンプレを作れば使い回しが容易なことが大きな強みです!
今回は、実際に私がtkinterで作成したPythonコードのテンプレを解説します!
それではさっそく解説に入ります。
Pythonの仮想環境構築
tkinterでコードを記述する前に、以前記事で解説したように仮想環境を構築しておきましょう。
個人的におすすめしたいのは、virtualenvによる仮想環境構築の方法です。
記事で解説したバッチファイルをダブルクリックするだけで仮想環境構築が完了するので、まだチェックしていない方はぜひ見てみてください。
今回は以下のようなバッチファイルを作成しましょう。
@echo off
rem スクリプトが置かれている場所をカレントディレクトリにする。
cd /d %~dp0
rem 念のためvirtualenvのインストールとpipのアップグレードを行う。
pip install virtualenv
python -m pip install --upgrade pip
rem vENVの環境を構築する。
python -m venv vENV
call ./vENV/Scripts/activate
python -m pip install --upgrade pip
rem 各パッケージをインストール
pip install openpyxl
pip install pyinstaller
pip install pandas
pip install numpy
pause
TkinterでGUIアプリを作成
回りくどいことは言わず、結論として以下のコードでPythonのエクセル操作するGUIアプリが作成できます。
こちらのコードは私が試行錯誤していきついたコードです。他のサイトにはないコードなので参考になると思います。
import os,sys
import openpyxl as px
import tkinter
from tkinter import Tk,StringVar,ttk,filedialog,IntVar,messagebox,LEFT
import re
#参照ボタンクリック時
def ref_clicked():
fTyp = [("EXCELファイル","*.xlsx")]
iDir = os.path.abspath(os.path.dirname(__file__))
filepath = filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir)
if len(filepath) == 0:
refpath.set(u'選択をキャンセルしました。もう一度"参照"ボタンをクリックしてください。')
else:
refpath.set(filepath)
# スタートボタンクリック時
def start_clicked(fp,text):
if fp:
wb = px.load_workbook(fp)
#シートのインデックスからWorksheetオブジェクトを取得
ws = wb.worksheets[0]
# textから空白以外の文字列を一文字ずつリストに格納
textlist = [n for n in text if n != ' ']
# Count用のi,jを定義
i, j = 0, 0
deletelist = []
#データを処理する行の一つ上のセルの行を取得する。
for rows in ws.iter_rows(min_row=1,min_col=1,max_row=ws.max_row,max_col=1):
i += 1
# リストをループ
if i < ws.max_row + 1:
for id in textlist:
if id in ws.cell(row=i, column=1).value:
j += 1
# textの文字が3つ以上cellの値と合致していたら行を削除する。
if j >= 3:
j = 0
# リストにiの値を追加
ws.delete_rows(i)
else:
j = 0
# 対象の行をまとめて削除
firstloop = True
count = 0
for x in deletelist:
if firstloop:
ws.delete_rows(x)
firstloop = False
count += 1
elif firstloop == False:
# 行の削除に合わせて、xの値を調整する。
x = x-count
ws.delete_rows(x)
count += 1
fp_save = fp + '_AfterProcessing'
fp_save = fp_save.replace('.xlsx','')
fp_save = fp_save.replace('.xlsm','')
# 正規表現で検索
if re.search(r'.xlsx', fp):
fp_save = fp_save + '.xlsx'
if re.search(r'.xlsm', fp):
fp_save = fp_save + '.xlsm'
#編集したエクセルを保存する。
wb.save(fp_save)
#解析終了のメッセージボックスを表示する。
messagebox.showinfo('Finish', 'データ処理が終了しました')
if __name__ == '__main__':
# ウインドウの設定
root = Tk()
root.title('~tkinter Excel line delete app~')
root.resizable(False, False)
# Frame1の作成
frame1 = ttk.Frame(root, padding=10)
frame1.grid()
# 参照ボタンの作成
button1 = ttk.Button(root, text=u'参照', command=ref_clicked)
button1.grid(row=0, column=1)
#ファイルラベルの作成
s = StringVar()
s.set('ファイル>>')
filelabel = ttk.Label(frame1, textvariable=s)
filelabel.grid(row=0, column=0)
# 参照パスラベルの作成
refpath = StringVar()
refpathtextbox_entry = ttk.Entry(frame1, textvariable=refpath, width=54)
refpathtextbox_entry.grid(row=0, column=1)
refpathtextbox_entry.insert(tkinter.END,u'"参照"ボタンを押して、解析するExcelファイルを選択してください。')
# ユーザーがテキストボックスを編集できないようにする。
refpathtextbox_entry.configure(state='readonly')
# frame2の作成
frame2 = ttk.Frame(root, padding=10)
frame2.grid()
# テキストボックスラベルの作成
t = StringVar()
t.set('重複したら削除するIDを入力してください(例: B C D)>>')
textlabel = ttk.Label(frame2, textvariable=t)
textlabel.grid(row=1, column=0)
# テキストボックスの作成
text = StringVar()
textbox = ttk.Entry(frame2, textvariable=text, width=20)
textbox.grid(row=1, column=1)
# frame3の作成
frame3 = ttk.Frame(root, padding=(0,5))
frame3.grid(row=3, column=0)
# Startボタンの作成
stButton = ttk.Button(frame3, text='Start', command=lambda: start_clicked(refpath.get(),text.get()))
stButton.pack(side=LEFT)
# Cancelボタンの作成
button3 = ttk.Button(frame3, text='End', command=lambda: sys.exit())
button3.pack(side=LEFT)
# 実行
root.mainloop()
実行すると、以下のようなGUIアプリが表示されます。
”参照”ボタンを押すことで、ファイル選択ダイアログが開き、Pythonで操作したいファイルをユーザーが選択することができます。
今回は例として、「テキストボックスに入力したIDとエクセルの行が一致していればエクセルの行を削除する」とうコードを書いています。
ここのコードは、自身の実現したい操作に合わせてコードを書き換えてください。
具体的には、スタートボタンクリック時の”if fp:”より下のコードを書き換えていただければOKです。
ExcelでもPowerPointでもPDFでもPythonで処理したいコードを記述すれば、GUIアプリで選択したファイルに対して処理を行うことができます!
まとめ:TkinterでPythonのGUIアプリを作ろう
今回の記事ではPythonのTkinterを用いて実践的なGUIアプリを作成する方法を解説しました。
幅広く応用の効く内容となっておりますのでぜひコードをチェックしてみてください。
また、作成したGUIアプリを配布する方法はこちらの記事で解説しています。
簡単な手法でPython環境を構築せずともGUIアプリを実行できるようになるため、配布する方法としてはおすすめです。
また、プログラミングを学習したいと思っている方はこちらの記事で紹介しているように、買い切り型のオンライン動画学習サービスUdemyがおすすめです。講師の方々のレベルがとても高いことが特長です。
独学でプログラミング学習をするなら、まずおすすめしたいのがUdemyです。オンライン動画買い切り形式で、実務レベルのスキルを習得できます。定期的に80~90%OFFセールが実施されていますよ。
\ セール中は80~90%OFFで購入可能/
30日間返金保証
最後まで読んでいただきありがとうございました。ではまた、次の記事で!
コメント