はじめに
皆さんは資格試験に向けた受験勉強はどのように学習していますか?
僕は参考書やPing-tなどを活用することが多いですが、これらの問題が一つのアプリにまとまっていると便利だなと思ったことないですか?
僕は一つのアプリで試験勉強出来たら便利だなと思ったので、pythonの勉強ついでにGUIアプリを作ってみました。
ツール概要
pythonのtkinterを使って、下図のようなGUI画面を作りました(今回はサンプル)。
問題と選択肢はCSVファイルに記載し、そこから読み出すようにしています。
問題のタイトル(下図では「駅クイズ」)など問題に依存するような文言はなるべく、GUI画面とは切り離すため、CSVファイルから読み出すようにしています。
maintitle = self.managedb.getTitle()
# textbox
frame1 = Tk.Frame(self, relief=Tk.RIDGE, bg='#30c558')
self.mainLabel = Tk.Label(frame1, text=maintitle,
font = ('FixedSys', 16),
fg='red', bg='#30c558')
self.mainLabel.pack()
frame1.place(x=10, y=10)
この例では、以下のようなCSVファイルから「駅クイズ」という文字列をgetTitle()で取得してテキストボックスに設定しています。
駅クイズ,駅クイズ,駅クイズランキング,駅クイズ問題数:
1,"東海道新幹線で新富士の隣の駅はどれ?","熱海","掛川","三島","浜松","",3,"J"
def internal_update_db(self, qusname):
tempList = []
hIn = open(qusname, 'r', encoding="utf-8")
reader = csv.reader(hIn)
counter = 0
for row in reader:
if row[0][0] == '#':
continue
if counter == 0:
self.title = row[0]
counter = 1
continue
tempList.append(row)
CSVファイル1行目のカンマで区切られた最初のアイテムを取得してタイトルとしています(self.titleの部分)。
tkinterでは凝ったGUIは作れないと思いますが、自己満足程度のものであれば、下記のように作れますので、勉強ついでに試してみるのも面白いと思います。
このツールの場合、3回間違えたらゲーム終了となり、履歴を残すようにしています。また、日別の正解率などをopenpyxlを使ってグラフ化しています。
感想
Pythonだとtkinterを使えば、比較的簡単にGUIツールを作ることができるので、楽になったな~という印象です。以前はGUIツールを作成するために、Visual C++などを使っていましたが、その頃に比べると手間が少ないなと感じました。
このツールの場合、問題や選択肢を記載したCSVファイルを別途用意してあげる必要がありますが、その作成に手間がかかってしまうのが少し難点なところ。でもその手間をかけてしまえば、あとはひたすらこのツールを使って受験勉強できるので、僕はその手間をかけてでもCSVファイルを作っています(CSVファイルを作ることで問題や選択肢を何回も見直すことになるので、それで勉強になっているという副作用もありますね)。
今度はtkinterではなくguizeroをつかってみようかなと思っています。