「Pythonでデスクトップアプリを作ろう 前編」 その19
# -*- coding: utf-8 -*-"""Created on Sat Mar 18 15:37:55 2023@author: mlupi""""""『日経ソフトウエア』2022年09月号(p.024~p.040)の特集記事「特集2 Pythonでデスクトップアプリを作ろう 前編」に挑戦中。なお、基礎については、当ブログの「Pythonことはじめ」などを参照してください。"""# 「Pythonでデスクトップアプリを作ろう 前編」 その19# Part4 「4択クイズ」アプリを作ろう(p.037~p.040)# ③ 4択クイズのデスクトップアプリを作る(p.039~p.040)## 『日経ソフトウエア』2022年09月号(p.024~p.040)## 目次## Part1 TkInterの基本をマスターしよう(p.024~p.028)# ① ウィジェットとウィジェットの親子関係(p.024~p.026)# ② イベント駆動型のプログラミング(p.026~p.027)# ③ ウィジェットの配置(p.027~p.028)# Part2 「BMI計算機」を作ろう(p.029~p.033)# ① Buttonウィジェットの使い方(p.029)# ② grid関数でウィジェットを格子状に配置する(p.030~p.032)# ③ BMI計算機のデスクトップアプリを作る(p.032~p.033)# Part3 「割り勘計算機」アプリを作ろう(p.034~p.037)# ① 2つの画面を切り替える(p.034~p.035)# ② Comboboxウィジェットを使う(p.035~p.036)# ③ 割り勘計算機のデスクトップアプリを作る(p.036~p.037)# Part4 「4択クイズ」アプリを作ろう(p.037~p.040)# ① Radiobuttonウィジェットを使う(p.038~p.039)# ② CSVファイルを読み込む(p.039)# ③ 4択クイズのデスクトップアプリを作る(p.039~p.040)#========== リスト3●「quiz.py」はここから# 4択クイズのプログラム# GUIライブラリーの「Tkinter」モジュールを、「tk」という名前でインポートする。import tkinter as tk# 「Tkinter」モジュールから「messagebox」モジュールをインポートする。from tkinter import messagebox# 「csv」モジュールをインポートする。import csv# 次のクイズを設定def change_quiz(): global quiz_count var.set(0) quiz_count = quiz_count + 1 if quiz_count < len(data): question['text'] = data[quiz_count][0] for i in range(len(radio)): radio[i]['text'] = data[quiz_count][i + 1] radio[i]['variable'] = var radio[i]['value'] = i + 1 else: quiz_count = quiz_count - 1 messagebox.showinfo('メッセージ', 'クイズはもうありません!') # 正解、不正解の表示def judgement(): if data[quiz_count][5] == str(var.get()): messagebox.showinfo('正解', '正解です。' ) else: messagebox.showinfo('不正解', '残念!不正解です!' )# 「Tk」関数を使って、ウインドウ(トップレベルtkウイジェット)を生成し、 「root」という名前を付ける# 「Tk」関数は、「Tk」クラスから、ウインドウ(トップレベルtkウイジェット)を生成するための関数。root = tk.Tk()# ウインドウの中身の大きさを指定# ウインドウの中身(タイトルバーなどを除いた内部)の大きさを「geometry」関数で指定する。# ('300x250')は、横サイズ=300ピクセル、縦サイズ=250ピクセルを表しているroot.geometry('300x250') # ウインドウの表示タイトルを「4択クイズアプリ」にする。root.title('4択クイズアプリ')for i in range(2): root.columnconfigure(i, weight=1)for i in range(6): root.rowconfigure(i, weight=1) # クイズ番号(quiz_count)の初期化(0始まり)quiz_count = 0# 「var」は、選択されているラジオボタンを保持する変数var = tk.IntVar()# 「data」は、ファイルから読み込んだクイズデータを格納する変数data = []# 「quiz.csv」からクイズデータを読み込むwith open('quiz.csv',encoding='utf-8', newline='') as csvfile: reader_quiz = csv.reader(csvfile) data = [row for row in reader_quiz] question = tk.Label(root, text=data[quiz_count][0])question.grid(row=0, column=0, columnspan=2) # 「radiobutton」ウイジェットの生成と配置radio = []for i in range(4): radio.append(tk.Radiobutton(root, text=data[quiz_count][i + 1], variable=var, value=i+1)) radio[i].grid(row=i+1, column=0, columnspan=2) answer = tk.Button(root, text='回答', command=judgement)answer.grid(row=5, column=0, sticky=tk.N) next_quiz = tk.Button(root, text='次のクイズ', command=change_quiz)next_quiz.grid(row=5, column=1, sticky=tk.N) # ウインドウを表示して、「メインループ」に入る。# 「mainloop(メインループ)」は、「イベントループ」で、ウインドウで発生する# 「イベント」を待っている状態のループ。root.mainloop()#========== リスト3●「quiz.py」は、ここまで〇「quiz.csv」の内容は次のとおり。(最後の数字は、半角)「松坂牛」の正しい読み方は?,まつざかぎゅう,しょうざかぎゅう,まつざかうし,まつさかうし,4「チゲ鍋」の「チゲ」の意味は?,鍋,辛い,赤い,おいしい,1「地震・雷・火事・おやじ」の「おやじ」の意味は?,親父,台風,爆弾,大砲,2リスト3●「quiz.py」の実行結果回答した結果「次のクイズ」ボタンを押したところ。