Savez-vous que vous pouvez tester votre vitesse de frappe en utilisant Python ? Un testeur de vitesse de frappe est une façon amusante de tester la vitesse à laquelle quelqu’un peut taper. Il peut être utilisé pour concevoir une interface de type jeu pour permettre aux personnes de tous âges de savoir à quelle vitesse ils peuvent taper, ou il peut être utilisé dans un environnement éducatif où la vitesse de frappe est essentielle à la réussite d’un élève. Dans cet article de blog, nous couvrirons les étapes de création d’un testeur de vitesse de frappe pour trouver la vitesse de frappe d’un seul utilisateur. nous utiliserons Tkinter pour créer une interface graphique pour l’application.
Conditions préalables
Tkinter:
Tkinter est la bibliothèque Python intégrée standard pour la création d’interfaces utilisateur graphiques (GUI). Ce n’est pas vraiment une « chose » distincte – c’est juste la partie de la bibliothèque standard qui est responsable du dessin des graphiques, de l’acceptation des entrées de l’utilisateur, etc. Tkinter est conçu pour être facile à utiliser, et c’est donc une bonne bibliothèque pour les débutants qui commencent tout juste avec le développement Python ou GUI.
Random:
Le module Python aléatoire est un module intégré de Python qui peut être utilisé pour bricoler et générer des nombres imprévisibles. Le module peut également être utilisé pour effectuer diverses astuces telles que la génération de chiffres inattendus pour des listes ou des chaînes, etc. Nous l’utilisons pour que chaque fois que quelqu’un réinitialise l’application, une phrase différente apparaisse.
Threading:
Ce package est utilisé pour introduire plusieurs threads dans le programme. Lorsqu’un programme est exécuté, il est considéré comme un processus et à l’intérieur d’un processus, il y a un thread. Lorsqu’un programme est exécuté de manière synchrone, il crée un processus sous lequel il y a un thread. Mais quand il y a un programme asynchrone, il y a un processus mais il y a plus d’un thread.
Par exemple, dans ce tutoriel, nous utilisons un module de threading pour exécuter deux tâches en même temps. La première tâche consiste à enregistrer une entrée de saisie par l’utilisateur et la deuxième tâche consiste à suivre le temps écoulé au fur et à mesure que l’utilisateur tape. Nous pouvons le faire en créant plusieurs threads à l’aide du module.
Étape 1 : Créer un fichier texte
Créez un fichier text.txt et enregistrez une ligne de phrase aléatoire que vous souhaitez afficher lors du test de dactylographie.
Hello, how are you, I guess you are fine hmm. Please don't forget to share your thoughts. Share this article with your friends. Hello, the world this text is a pretty useful program. Python is an awesome programming language.
Étape 2 : Créer un nouveau fichier .py
Suivez maintenant le code
Étape 3 : Importer les dépendances
Tout d’abord, importons les dépendances
import tkinter as tk
import time
import threading
import random
Etape 4 : Définir l’interface graphique du testeur
L’interface graphique réelle fera partie d’une classe car lorsque vous avez une interface utilisateur graphique avec des fonctions et des éléments d’interface utilisateur qui accèdent également à ces fonctions et éléments d’interface utilisateur, vous voulez que ce soit dans un objet, sinon vous ne saurez pas lequel à définir d’abord.
Ici, dans l’application, nous voulons avoir quatre choses
- Étiquette où la phrase sera montrée aux types par l’utilisateur
- Une zone de texte à saisir par l’utilisateur
- Minuterie pour afficher CPS (caractère par seconde), CPM (caractère par minute), WPS (mot par seconde) et WPM (mot par minute)
- Et dans le dernier, nous voulons avoir un bouton de réinitialisation qui réinitialisera l’application et affichera les différentes phrases à taper.
# create a class for ul elements
class TypeSpeedGUI:
# create a simple constructor
def __init__(self):
self.root = tk.Tk()
self.root.title("Typing speed tester")
self.root.geometry("800x600")
self.text = open("text.txt", "r").read().split("\n")
self.frame = tk.Frame(self.root)
# creating a lable
self.sample_label = tk.Label(self.frame, text=random.choice(self.text), font=("Helventica", 18))
self.sample_label.grid(row=0, column=0, columnspan=2, padx=5, pady=5)
# creating a text box
self.input_entry = tk.Entry(self.frame, width=40, font=("Helventica", 24))
self.input_entry.grid(row=1, column=0, columnspan=2, padx=5, pady=10)
# adding the function to start automatically if the key is pressed
self.input_entry.bind("<KeyPress>", self.start)
# creating a label for the timer
self.speed_label = tk.Label(self.frame, text="Speed: \n0.00 CPS\n0.00 CPM\n0.00 WPS\n0.00 WPS", font=("Helventica", 18))
self.speed_label.grid(row=2, column=0, columnspan=2, padx=5, pady=10)
# creating a reset button
self.reset_button = tk.Button(self.frame, text="Reset", command=self.reset, font=("Helventica", 24))
self.reset_button.grid(row=3, column=0, columnspan=2, padx=5, pady=10)
self.frame.pack(expand=True)
# adding the boolean to know that the app is started or not
self.counter = 0
self.running = False
self.root.mainloop()
Étape 5 : Définir la fonction de démarrage
Nous avons déjà défini dans la section ci-dessus que le chronomètre démarrera lorsque l’utilisateur appuie sur la touche mais nous ne voulons pas le démarrer si nous avons appuyé sur la touche Maj ou la touche Ctrl ou toute autre touche de modification. Nous ajoutons donc cette fonction à l’aide de l’instruction if et nous devons également définir l’instruction if pour saisir une mauvaise entrée, car si l’utilisateur peut appuyer sur la touche, cela n’a aucun sens.
Définissez la couleur du texte :
- Si l’utilisateur tape le mauvais mot, la couleur du texte sera convertie en rouge
- Si l’utilisateur tape le bon mot, la couleur du texte restera noire
- Et si l’utilisateur a terminé la phrase sans aucune erreur, la couleur du texte passera au vert.
def start(self ,event):
if not self.running:
if not event.keycode in [16, 17, 18]:
self.running = True
t = threading.Thread(target=self.time_thread)
t.start()
if not self.sample_label.cget('text').startswith(self.input_entry.get()):
self.input_entry.config(fg="red")
else:
self.input_entry.config(fg="black")
if self.input_entry.get() == self.sample_label.cget('text')[:-1]:
self.running = False
self.input_entry.config(fg="green")
Étape 6 : Définissez la fonction de temps dans un autre fil de discussion
Cette section du code est assez simple ici, nous avons créé une fonction pour afficher le temps en CPS (caractère par seconde), CPM (caractère par minute), WPS (mot par seconde) et WPM (mot par minute).
def time_thread(self):
while self.running:
time.sleep(0.1)
self.counter += 0.1
cps = len(self.input_entry.get()) / self.counter
cpm = cps * 60
wps = len(self.input_entry.get().split(" ")) / self.counter
wpm = wps * 60
self.speed_label.config(text=f"Speed: \n{cps:.2f} CPS\n{cpm:.2f} CPM\n{wps:.2f} WPS\n{wpm:.2f} WPM")
Step 7: Define the reset function
def reset(self):
self.running = False
self.counter = 0
self.speed_label.config(text="Speed: \n0.00 CPS\n0.00 CPM\n0.00 WPS\n0.00 WPM")
self.sample_label.config(text=random.choice(self.text))
self.input_entry.delete(0, tk.END)
Sortir:
Comme vous pouvez le voir dans la sortie, ce programme fonctionne très bien.
Derniers mots
Eh bien, c’est ainsi que vous pouvez tester votre vitesse de frappe en utilisant Python. Ce testeur de vitesse de frappe est un exemple de la façon dont vous pouvez utiliser la puissance de la programmation pour créer quelque chose d’amusant et d’interactif. Nous l’avons créé en utilisant python qui est implémenté à l’aide de la bibliothèque python Tkinter et peut être facilement personnalisé. Nous espérons que vous avez apprécié ce test de vitesse de frappe rapide et facile ! Si vous avez des questions sur ce test de vitesse de frappe ou sur la programmation en général, veuillez nous contacter.
Voici quelques tutoriels utiles que vous pouvez lire :