Teste sua velocidade e precisão de digitação usando Python
A velocidade média de digitação é de cerca de 40 palavras por minuto. Se você deseja ser produtivo em seu trabalho, deve digitar pelo menos 65 a 70 palavras por minuto. Aumentar sua velocidade de digitação melhorará sua eficiência, o que aumentará tarefas como entrada de dados, direitos autorais, transcrição e funções administrativas.
Para testar suas habilidades de digitação, você pode criar um aplicativo de teste de digitação simples usando Python. Usando isso, você pode obter resultados precisos e desenvolver um hábito viciante para melhorar com o tempo.
Os Módulos Tkinter e Random
Para desenvolver o Typing Test Game, você utilizará o módulo tkinter e o módulo random . Tkinter permite que você crie aplicativos de desktop. Ele oferece uma variedade de widgets como botões, rótulos, caixas de texto e gerenciadores de layout que facilitam o desenvolvimento de aplicativos sem muito esforço.
Além disso, ele vem com bibliotecas úteis, objetos de tela e analisadores de HTML/XML/PDF. Para instalar o Tkinter em seu sistema, abra o terminal e execute:
pip install tkinter
O módulo Random possui uma coleção de funções para gerar números aleatórios. Você pode usar essas rotinas para produzir sequências embaralhadas, movimentos de jogo e números inteiros pseudo-aleatórios. Alguns de seus usos comuns incluem a simulação de jogadas de dados, listas de embaralhamento, um gerador de senha aleatório e em jogos como críquete de mão e adivinhação de números.
Como construir um aplicativo de teste de digitação usando Python
Siga estas etapas para criar um aplicativo de teste de digitação usando o módulo Tkinter e Random do Python.
Comece importando o Tkinter e o módulo Random. Inicialize a instância do Tkinter e exiba a janela raiz. Defina as dimensões em pixels, o título e a cor de fundo da janela.
from tkinter import *
import random
from tkinter import messagebox
Mainscreen = Tk()
Mainscreen.geometry('1000x600')
Mainscreen.title('MakeUseOf Typing Game')
Mainscreen.config(bg="aqua")
Baixe a lista de palavras do repositório GitHub e coloque-a na mesma pasta que o script Python para facilitar a referência. Leia o conteúdo do arquivo de texto e use a função split() para armazenar cada palavra em uma lista. Inicialize as variáveis score, miss e count1 como zero e a variável time como 60.
file1 = open('words.txt', 'r')
words = file1.read().split()
score = missed = count1 = 0
time = 60
Defina uma função chamada Giventime() que faça referência às variáveis globais mencionadas acima. Se o tempo restante for maior que zero, diminua-o em um e exiba-o no rótulo timercount (declarado na última metade do código). Use a função after() para chamar de volta a função Giventime() após um atraso de 1.000 milissegundos (um segundo).
Se o tempo acabar, altere o conteúdo do rótulo de início para Game Over e exiba simultaneamente a pontuação no rótulo de instrução do jogo. Passe as variáveis correspondentes para a função format() para exibir o Hit, Miss e o Total Score.
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))
Passe o título e a mensagem para a função askokcancel() . Se a resposta recebida na caixa de diálogo for verdadeira, interrompa o aplicativo usando a função exit() .
rr = messagebox.askokcancel('Game Over!', 'Press Ok to Exit')
if rr == True:
exit()
Defina uma função chamada game() que recebe o evento como um argumento de entrada. Faça referência às variáveis globais. Se a variável time for igual a 60, execute a função Giventime() para iniciar a contagem regressiva. À medida que o jogo está em andamento, altere o rótulo de início para Continuar e o rótulo de instrução do jogo para pressionar Enter após digitar a palavra usando a função configure().
def game(event):
global score, missed
if time == 60:
giventime()
startlabel.configure(text='Continue..')
gameinstruction.configure(text='Hit Enter After Typing The Word')
Recupere a palavra digitada em wordentry usando a função get() e verifique se é igual à palavra exibida na tela. Se sim, incremente a pontuação e reflita na etiqueta de pontuação. Caso contrário, incremente a variável perdida em um.
Reordene os itens na lista de palavras e exiba o primeiro elemento. Use a função delete() do zero ao último índice no widget de entrada de palavras para limpar o conteúdo.
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)
Defina startlabel, labelforward, scorelabel, scorelabelcount, labelfortimer, timercount e gameinstruction usando o widget Label. O widget de rótulo pega na janela pai na qual você deseja colocá-lo, o texto que deve ser exibido, o tipo de fonte, tamanho, cor e estilo junto com a cor de fundo do rótulo.
Passe as coordenadas X e Y para o método place() para organizar os rótulos em uma posição específica.
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)
Defina um widget de entrada que aceite a palavra digitada. Defina a janela pai na qual deseja colocá-la, o tipo de fonte, tamanho, estilo junto com o tamanho da borda e a propriedade justificar. Use o método place() para posicionar o widget de entrada e o método focus_set() para ativar a caixa de entrada para entrada.
wordentry = Entry(Mainscreen, font=('arial',25,'italic bold'), bd=10, justify='center')
wordentry.place(x=350, y=330)
wordentry.focus_set()
Uma etapa importante é vincular a tecla Enter a um evento na janela do Tkinter. Isso garante que, quando o jogador pressionar Enter, uma função específica seja executada. Para conseguir isso, você passa a string <Return> e a função game() como parâmetros para a função bind() . A função mainloop() diz ao Python para executar o loop de eventos Tkinter e escutar eventos (como pressionamentos de botão) até você fechar a janela.
Mainscreen.bind('<Return>', game)
mainloop()
Junte todo o código e execute-o para jogar o jogo de teste de digitação ao seu alcance.
Saída do aplicativo de teste de digitação do Python
Ao executar o programa acima, aparece uma janela com 1.000 pixels de largura e 600 pixels de altura, com fundo aqua, placar, contagem regressiva e uma instrução para iniciar o jogo.
Ao apertar Enter, o jogo começa e a cada resposta correta o programa incrementa a pontuação em um.
Quando o tempo acabar, o programa exibe a pontuação final junto com uma caixa de diálogo para sair do jogo.
Idéias da GUI do Tkinter para iniciantes
O Tkinter é uma ferramenta muito poderosa que você pode usar para criar aplicativos simples a totalmente funcionais, atraentes e robustos. Mesmo um novato pode usar o Tkinter. Alguns exemplos de projetos que você pode criar são um jogo de perguntas e respostas, um catálogo de endereços, uma lista de tarefas ou um visualizador de imagens.
Se você quiser ir além do Tkinter, algumas das alternativas populares incluem Qt designer, Kivy, Toga e BeeWare. Todas essas estruturas são versáteis e oferecem suporte ao desenvolvimento de plataforma cruzada, para que você possa executar seus aplicativos sem problemas em qualquer ambiente.
Deixe um comentário