Python を使用して入力速度と精度をテストする
平均的なタイピング速度は、1 分間に約 40 語です。仕事で生産性を高めたい場合は、少なくとも 1 分間に 65 ~ 70 ワードを入力することを目標にする必要があります。タイピング速度を上げると効率が向上し、データ入力、コピーライティング、転記、管理の役割などのタスクが促進されます。
タイピング スキルをテストするために、Python を使用して簡単なタイピング テスト アプリケーションを作成できます。これを使用すると、正確な結果が得られ、中毒性のある習慣を身につけて、時間の経過とともに改善することができます.
Tkinter と Random モジュール
タイピング テスト ゲームを開発するには、 tkinterモジュールとrandomモジュールを使用します。Tkinter を使用すると、デスクトップ アプリケーションを作成できます。ボタン、ラベル、テキスト ボックス、レイアウト マネージャーなどのさまざまなウィジェットが用意されているため、手間をかけずにアプリケーションを簡単に開発できます。
これらとは別に、便利なライブラリ、キャンバス オブジェクト、および HTML/XML/PDF パーサーが付属しています。Tkinter をシステムにインストールするには、ターミナルを開いて以下を実行します。
pip install tkinter
Random モジュールには、乱数を生成するための関数のコレクションがあります。これらのルーチンを使用して、シャッフルされたシーケンス、ゲームの動き、および疑似乱数整数を生成できます。その一般的な用途には、サイコロのロールのシミュレーション、リストのシャッフル、ランダム パスワード ジェネレーター、ハンド クリケットや数字当てなどのゲームが含まれます。
Python を使用してタイピング テスト アプリを作成する方法
次の手順に従って、Python の Tkinter および Random モジュールを使用してタイピング テスト アプリケーションを構築します。
Tkinter と Random モジュールをインポートすることから始めます。Tkinter インスタンスを初期化し、ルート ウィンドウを表示します。ウィンドウのサイズ、タイトル、および背景色をピクセル単位で設定します。
from tkinter import *
import random
from tkinter import messagebox
Mainscreen = Tk()
Mainscreen.geometry('1000x600')
Mainscreen.title('MakeUseOf Typing Game')
Mainscreen.config(bg="aqua")
簡単に参照できるように、GitHub リポジトリから単語のリストをダウンロードし、Python スクリプトと同じフォルダーに配置します。テキスト ファイルの内容を読み取り、split() 関数を使用して各単語をリストに格納します。score、missed、および count1 変数を 0 に初期化し、time 変数を 60 に初期化します。
file1 = open('words.txt', 'r')
words = file1.read().split()
score = missed = count1 = 0
time = 60
上記のグローバル変数を参照するgiventime()という名前の関数を定義します。残り時間がゼロより大きい場合は、1 だけ減らして timercount ラベル (コードの後半で宣言) に表示します。after()関数を使用して、1,000 ミリ秒 (1 秒) の遅延後に giventime() 関数をコールバックします。
時間がオーバーした場合、startlabel の内容を Game Over に変更し、同時に gameinstruction ラベルにスコアを表示します。対応する変数をformat()関数に渡して、ヒット、ミス、および合計スコアを表示します。
def giventime():
global time, score, missed
if time > 0:
time -= 1
timercount.configure(text=time)
timercount.after(1000, giventime)
else:
startlabel.configure(text='Game Over!')
gameinstruction.configure(text='Hit = {} | Miss = {} | Total Score = {}'.format(score, missed, score - missed))
タイトルとメッセージをaskokcancel()関数に渡します。ダイアログ ボックスで受け取った応答が true と評価された場合は、exit()関数を使用してアプリケーションを停止します。
rr = messagebox.askokcancel('Game Over!', 'Press Ok to Exit')
if rr == True:
exit()
event を入力引数として取るgame()という名前の関数を定義します。グローバル変数を参照します。時間変数が 60 の場合、giventime() 関数を実行してカウントダウンを開始します。ゲームの進行中に、configure() 関数を使用して単語を入力した後、startlabel を Continue に変更し、gameinstruction ラベルを Enter に変更します。
def game(event):
global score, missed
if time == 60:
giventime()
startlabel.configure(text='Continue..')
gameinstruction.configure(text='Hit Enter After Typing The Word')
get()関数を使用して wordentry に入力された単語を取得し、画面に表示されている単語と等しいかどうかを確認します。はいの場合は、スコアを増やしてスコア ラベルに反映します。それ以外の場合は、欠落した変数を 1 つ増やします。
単語リストの項目を並べ替え、最初の要素を表示します。wordentry ウィジェットのゼロから最後のインデックスまでのdelete()関数を使用して、コンテンツをクリアします。
if wordentry.get() == labelforward['text']:
score += 1
scorelabelcount.configure(text=score)
else:
missed += 1
random.shuffle(words)
labelforward.configure(text=words[0])
wordentry.delete(0, END)
ラベル ウィジェットを使用して、startlabel、labelforward、scorelabel、scorelabelcount、labelfortimer、timercount、および gameinstruction を設定します。ラベル ウィジェットは、配置先の親ウィンドウ、表示するテキスト、フォントの種類、サイズ、色、スタイル、およびラベルの背景色を取り込みます。
X 座標と Y 座標をplace()メソッドに渡して、ラベルを特定の位置に整理します。
startlabel = Label(Mainscreen,text='Typing Game',font=('arial',30,'italic bold'),bg='black',fg='white')
startlabel.place(x=375, y=50)
labelforward = Label(Mainscreen,text=' ',font=('arial',45,'italic bold'),fg='green')
labelforward.place(x=350, y=240)
scorelabel = Label(Mainscreen,text='Your Score:',font=('arial',25,'italic bold'),fg='maroon')
scorelabel.place(x=110, y=100)
scorelabelcount = Label(Mainscreen,text=score,font=('arial',25,'italic bold'),fg='purple')
scorelabelcount.place(x=250, y=180)
labelfortimer = Label(Mainscreen,text='Time Left:',font=('arial',25,'italic bold'),fg='maroon')
labelfortimer.place(x=700, y=100)
timercount = Label(Mainscreen,text=time,font=('arial',25,'italic bold'),fg='purple')
timercount.place(x=700, y=180)
gameinstruction = Label(Mainscreen,text='Hit Enter After Typing The Word',font=('arial',25,'italic bold'),fg='grey')
gameinstruction.place(x=250, y=500)
入力した単語を受け入れるエントリ ウィジェットを定義します。配置する親ウィンドウ、フォントの種類、サイズ、スタイル、境界線のサイズ、両端揃えのプロパティを設定します。place() メソッドを使用してエントリ ウィジェットを配置し、focus_set()メソッドを使用して入力用のエントリ ボックスをアクティブにします。
wordentry = Entry(Mainscreen, font=('arial',25,'italic bold'), bd=10, justify='center')
wordentry.place(x=350, y=330)
wordentry.focus_set()
重要なステップは、Enter キーを Tkinter ウィンドウのイベントにバインドすることです。そうすることで、プレイヤーがEnter キーを押したときに特定の機能が実行されるようになります。これを実現するには、<Return> 文字列と game() 関数をパラメーターとしてbind()関数に渡します。mainloop ()関数は、Tkinter イベント ループを実行し、ウィンドウを閉じるまでイベント (ボタンの押下など) をリッスンするように Python に指示します。
Mainscreen.bind('<Return>', game)
mainloop()
すべてのコードをまとめて実行し、すぐにタイピング テスト ゲームをプレイできます。
Python タイピング テスト アプリの出力
上記のプログラムを実行すると、幅 1,000 ピクセル、高さ 600 ピクセルのウィンドウが表示され、背景色は水色、スコアボード、カウントダウン タイマー、ゲーム開始の指示が表示されます。
Enter キーを押すとゲームが開始され、正解ごとにプログラムがスコアを 1 増やします。
時間が終わると、プログラムは最終スコアと、ゲームを終了するためのダイアログ ボックスを表示します。
初心者のための Tkinter GUI のアイデア
Tkinter は非常に強力なツールであり、魅力的で堅牢なシンプルなアプリケーションから完全に機能するアプリケーションを構築するために使用できます。初心者でも Tkinter を使用できます。ビルドできるサンプル プロジェクトには、クイズ ゲーム、アドレス帳、To Do リスト、または画像ビューアーなどがあります。
Tkinter を超えて移行したい場合は、Qt デザイナー、Kivy、Toga、BeeWare などの人気のある代替手段がいくつかあります。これらのフレームワークはすべて用途が広く、クロスプラットフォーム開発をサポートしているため、どのような環境でも問題なくアプリケーションを実行できます。
コメントを残す