Python 으로 타자 속도 측정 도 구 를 실현 하여 당신 의 손 속 도 를 측정 합 니 다.
이번 프로그램 에서 우리 가 사용 하 는 python 라 이브 러 리 는 완전히 python 의 내장 라 이브 러 리 입 니 다.그 중에서 인터페이스의 제작 은 tkinter 를 이용 하여 제작 합 니 다.핵심 프로그램 은 세 부분 으로 나 눌 수 있 는데 각각 다음 과 같다.
텍스트 표시
텍스트 입력 검사
결과 계산 및 표시
2.텍스트 내용 의 표시
프로그램 초기 실행 단계 와'텍스트 전환'단 추 를 누 르 면 소프트웨어 인터페이스 에 텍스트 를 표시 해 야 합 니 다.프로그램 은 다음 그림 과 같 습 니 다.
프로그램 에서 self.Reset 함수 의 역할 은 인터페이스의 내용 을 모두 리 셋 하고 초기 값 으로 설정 하 는 것 입 니 다.화면 에서'리 셋'단 추 를 누 르 거나 프로그램 을 처음 실행 할 때 self.Reset 함 수 를 호출 합 니 다.그 효 과 는 다음 그림 과 같 습 니 다.
비교 텍스트 의 표 시 는 self.getSentence 함 수 를 호출 하여 이 루어 집 니 다.프로그램 이 로 컬 sentences.txt 텍스트 를 읽 은 후에 모든 텍스트 내용 을 읽 습 니 다.그 중에서 모든 줄 은 독립 된 문장 입 니 다.
random 라 이브 러 리 의 choice 함 수 를 통 해 무 작위 로 문장 을 선택 하고 인터페이스 에 표시 합 니 다."텍스트 전환"단 추 를 누 르 면 인터페이스 에서 텍스트 를 바 꿀 수 있 습 니 다.아래 그림 과 같 습 니 다.
3.텍스트 입력 검사
인터페이스 에 텍스트 를 표시 한 후,다음은 아래 입력 상자 에서 위의 텍스트 내용 을 베껴 쓰 는 것 입 니 다.이 텍스트 의 내용 은 tkinter 라 이브 러 리 의 StringVar 대상 을 통 해 추적 합 니 다.프로그램 은 다음 그림 과 같 습 니 다.
텍스트 를 입력 할 때 StringVar 대상 의 trace 함 수 를 통 해 실시 간 으로 텍스트 를 추적 하고 self.check 함 수 를 실행 합 니 다.self.check 함 수 는 텍스트 를 입력 하기 시작 할 때 self.start 를 설정 하 는 역할 을 합 니 다.time 텍스트 입력 시간 입 니 다.
텍스트 의 길이 와 보 여 주 는 텍스트 의 길이 가 일치 할 때 프로그램 은 self.result 함 수 를 자동 으로 호출 하여 결 과 를 계산 하고 표시 합 니 다.그 효 과 는 아래 그림 과 같다.
4.결과 계산 과 표시
타자 속도 에 대한 계산 과 표 시 는 self.result 함 수 를 호출 하여 이 루어 집 니 다.그 프로그램 은 다음 그림 과 같 습 니 다.
프로그램 은 사용자 가 입력 한 텍스트 내용 을 가 져 온 다음 에 사용자 의 입력 텍스트 와 정확 한 텍스트 간 의 일치 프로그램 을 계산 하여 타자 의 정확 도 를 계산 합 니 다.사용자 의 타자 계산 시간 을 계산 하여 사용자 의 타자 속 도 를 계산 하고 인터페이스 에 표시 합 니 다.효 과 는 다음 그림 과 같 습 니 다.
전체 코드
더 이상 말 하지 않 고 마지막 에 하 드 코드 를 직접 올 립 니 다.(주의:sentences.txt 파일 을 만들어 같은 폴 더 에 넣 어야 합 니 다)
import time
from random import choice
from tkinter import Tk, Label, CENTER, LEFT, StringVar, Entry,Button,DISABLED, END,NORMAL
class typeSpeed(object):
def __init__(self):
self.start_time = 0
self.sentence_words_num = 0
self.sentence = ""
self.root = Tk()
self.root.geometry("900x450+300+100")
self.root.title("Python ")
self.root.config(bg="#FFFF00")
Label(self.root, text=" ", anchor=CENTER, font=(
"times new roman", 50, "bold"), bg="#00154D", fg="#F2BC90").place(x=200, y=30)
self.sentence_label = Label(self.root, text=" ",
wraplength=400, anchor=CENTER, font=(" ", 15, "bold"), bg="#00154D", fg="#ffffff", width=40, justify=LEFT)
self.sentence_label.place(x=200, y=150)
self.text = StringVar()
self.text.trace("w", lambda name, index, mode, text=self.text: self.check(text))
self.input_entry = Entry(self.root, font=(" ", 15, "bold"),
width=40, textvariable=self.text)
self.input_entry.place(x=200, y=250)
reset_button = Button(self.root, text=" ", font=(
" ", 18, "bold"), width=12, bg="#808080", command=self.Reset)
reset_button.place(x=120, y=320)
changetext_button = Button(self.root, text=" ", font=(
" ", 18, "bold"), width=12, bg="#808080", command=self.getSentence)
changetext_button.place(x=360, y=320)
result_button = Button(self.root, text=" ", font=(
" ", 18, "bold"), width=12, bg="#808080", command=self.result)
result_button.place(x=600, y=320)
self.speed_label = Label(self.root, text=" : 00 ", font=(
" ", 15, "bold"), bg="#f28500", fg="#ffffff")
self.speed_label.place(x=120, y=380)
self.accu_label = Label(self.root, text=" : 00%", font=(
" ", 15, "bold"), bg="#f28500", fg="#ffffff")
self.accu_label.place(x=380, y=380)
self.time_label = Label(self.root, text=" : 0 ", font=(
" ", 15, "bold"), bg="#f28500", fg="#ffffff")
self.time_label.place(x=620, y=380)
self.getSentence()
self.root.mainloop()
def Reset(self):
self.input_entry.config(state=NORMAL)
self.input_entry.delete(0, END)
self.start_time = 0
self.speed_label.config(text=" : 00 ")
self.accu_label.config(text=" : 00%")
self.time_label.config(text=" : 0 ")
def getSentence(self):
self.Reset()
with open("./sentences.txt", "r", encoding="utf-8") as f:
sentences = f.readlines()
self.sentence = choice(sentences).rstrip()
self.sentence_label.config(text=self.sentence)
self.sentence_words_num = len(self.sentence)
def result(self):
duration = round(time.time() - self.start_time)
input_text = self.text.get()
wpm = round((len(input_text)/duration)*60)
count = 0
for index, char in enumerate(input_text):
if self.sentence[index] == char:
count += 1
accu = round((count/self.sentence_words_num)*100)
self.speed_label.config(text=" : {} ".format(wpm))
self.accu_label.config(text=" : {}%".format(accu))
self.time_label.config(text=" : {} ".format(duration))
def check(self, text):
if self.start_time == 0 and len(text.get()) == 1:
self.start_time = time.time()
elif len(text.get()) == self.sentence_words_num:
self.input_entry.config(state=DISABLED)
self.result()
if __name__ == '__main__':
파 이 썬 으로 타자 테스트 도 구 를 구현 하여 타자 속 도 를 측정 하 는 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 타자 테스트 기 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.