使用Python制作一個(gè)打字訓(xùn)練小工具
一、寫在前面
說道程序員,你會(huì)想到什么呢?有人認(rèn)為程序員象征著高薪,有人認(rèn)為程序員都是死肥宅,還有人想到的則是996和 ICU。
別人眼中的程序員:飛快的敲擊鍵盤、酷炫的切換屏幕、各種看不懂的字符代碼。
然而現(xiàn)實(shí)中的程序員呢?對(duì)于很多程序員來說,沒有百度和 Google 解決不了的問題,也沒有 ctrl + c 和 ctrl + v 實(shí)現(xiàn)不了的功能。
那么身為一個(gè)程序員,要怎么讓自己看起來更加“專業(yè)”呢?答案就是加快自己的打字速度了,敲的代碼可能是錯(cuò)的,但這個(gè)13卻是必須裝的!
然而還是有不少人打字不那么快的,可能就需要訓(xùn)練下了,但是既然身為程序員,為何不自己寫一個(gè)訓(xùn)練打字的小工具出來呢?
二、基本思路
使用 PyQT5 開發(fā) GUI,實(shí)現(xiàn)顯示句子并讓用戶輸入,然后將輸入的內(nèi)容和給出的句子進(jìn)行比對(duì),同時(shí)記錄所用的時(shí)間,最后將正確率輸出來。為了能夠持續(xù)打字輸入,還需要做一個(gè)“下一句”的功能。在實(shí)現(xiàn)了這兩個(gè)基本的功能后,一個(gè)簡單的打字訓(xùn)練小工具就做出來了。
三、界面設(shè)計(jì)
1.環(huán)境配置
PyQT5 的開發(fā)環(huán)境配置在上一篇博客中已經(jīng)說過了,因而這里不再贅述,如果不清楚的可以點(diǎn)這里查看。
2.界面設(shè)計(jì)
要進(jìn)行界面設(shè)計(jì),得先打開 QtDesigner,然后新建項(xiàng)目,選擇 Widget:
然后就往里面拖控件就好了,這還是很方便的,主要用的控件包括 Label、Text Edit、Push Button等,雙擊控件之后可以在右側(cè)修改控件的各種屬性。最終設(shè)計(jì)出的界面如下:
3.生成 Python 代碼
在設(shè)計(jì)完界面之后,將生成的結(jié)果保存下來,會(huì)得到一個(gè) .ui 為后綴的文件。這個(gè)文件我們還是無法直接使用的,需要轉(zhuǎn)變成 Python 代碼才行。此時(shí)就需要使用 pyuic5 命令了,不懂的可以點(diǎn)這里查看我的上篇博客。
四、槽函數(shù)
1.槽函數(shù)簡介
要進(jìn)行功能設(shè)計(jì),就得先知道槽函數(shù)。槽是普通的 C++ 成員函數(shù),槽在 Qt 開發(fā)軟件中是一個(gè)很重要的概念,在 Qt 里與信號(hào)連接的就是槽,我們一般稱之為槽函數(shù)。
在使用信號(hào)的時(shí)候,有四個(gè)參數(shù):
1)sender:發(fā)出信號(hào)的對(duì)象;
2)signal:發(fā)送對(duì)象發(fā)出的信號(hào);
3)receiver:接收信號(hào)的對(duì)象;
4)slot:接收對(duì)象在接收到信號(hào)之后所需要調(diào)用的函數(shù)(槽函數(shù))。
2.使用方法
(1)第一種方法
第一步,在 QtDesigner 中點(diǎn)擊 “Edit Signals/Slots”,然后左鍵點(diǎn)擊按鈕后將鼠標(biāo)拖到另一個(gè) Label 上:
第二步,在彈出的設(shè)置框中選擇具體的方法及功能。
這樣做很簡單,但是也有缺陷,問題在于不能自定義方法,只能使用給定的方法。
(2)第二種方法
在右下角找到 “Signal/Slot Editor” 并點(diǎn)擊,然后就可以點(diǎn)擊 “+” 創(chuàng)建信號(hào)了。
這種方法能夠讓我們自定義了,但是也不算方便,尤其是當(dāng)你不知道具體要實(shí)現(xiàn)什么方法的時(shí)候。
(3)第三種方法
使用 connect() 方法,傳入的參數(shù)為一個(gè)方法名稱。例如:
btn.clicked.connect(func)
五、功能實(shí)現(xiàn)
1.繼承函數(shù)
使用 pyuic5 生成 py 文件中定義了一個(gè) Ui_Form 類,其中包含了對(duì)各種控件的定義等,如果我們要增加其他功能,且直接在這個(gè) py 文件中修改的話,那么之后要更新界面之類的就不會(huì)不方便了,所以最好的方法是繼承 Ui_Form 類,然后在繼承類中添加修改。參考代碼如下:
import sys from PyQt5 import QtWidgets from typing.ui import Ui_Form class MyForm(Ui_Form, QtWidgets.QWidget): def __init__(self): super(MyForm, self).__init__() self.setupUi(self) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) my_form = MyForm() my_form.show() sys.exit(app.exec_())
2.隱藏顯示控件
有時(shí)候我們可能會(huì)需要將某些控件隱藏起來,這里簡單介紹幾種方法。
1)setHidden(bool) 設(shè)置控件是否隱藏;
2)hide() 隱藏控件;
這兩種隱藏的方法會(huì)完全隱藏控件,即不保留控件所占的位置。但如果要保留位置的話,可以使用下面這種方法:
def click(self): """ 點(diǎn)擊按鈕時(shí)調(diào)用 :return: """ self.get_time() the_input = self.textEdit.toPlainText() # 計(jì)算準(zhǔn)確率 count = 0 for i in range(len(the_input)): if the_input[i] == self.text[i]: count += 1 accuracy = count / len(self.text) * 100 # print(accuracy) self.show_label() # 設(shè)置提示信息 info = "有點(diǎn)可惜,你的正確率是: %.2f%% " % accuracy if accuracy != 100 else "恭喜你全對(duì)了呢!繼續(xù)加油哦!" self.info_lable.setText(info)
3.判斷輸入內(nèi)容
這一功能的實(shí)現(xiàn)需要在點(diǎn)擊“提交”按鈕時(shí)獲取輸入框中的內(nèi)容,再和給出的文本進(jìn)行對(duì)比,最后將結(jié)果返回顯示出來。
對(duì)于我這種懶人來說,點(diǎn)擊按鈕這種操作都是費(fèi)力的,所以最好加入一個(gè)快捷鍵,這樣就方便多了,可以使用如下方法設(shè)置:
# 設(shè)置快捷鍵 self.submit_btn.setShortcut('ctrl+e')
六、運(yùn)行結(jié)果
最終運(yùn)行結(jié)果的截圖如下:
提交之后還可以點(diǎn)擊下一句繼續(xù)訓(xùn)練:
完整代碼已上傳到 GitHub!
總結(jié)
以上所述是小編給大家介紹的使用Python制作一個(gè)打字訓(xùn)練小工具,希望對(duì)大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
相關(guān)文章
解決Python3 struct報(bào)錯(cuò)argument for 's'&
這篇文章主要為大家介紹了解決Python3 struct報(bào)錯(cuò)argument for 's' must be a bytes object方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08pandas中DataFrame數(shù)據(jù)合并連接(merge、join、concat)
這篇文章主要給大家介紹了關(guān)于pandas中DataFrame 數(shù)據(jù)合并連接(merge、join、concat)的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下2021-05-05python編程開發(fā)時(shí)間序列calendar模塊示例詳解
這篇文章主要為大家介紹了python編程開發(fā)時(shí)間序列calendar模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步早日升職加薪2021-11-11Python超詳細(xì)講解內(nèi)存管理機(jī)制
本章主要介紹Pyhon的內(nèi)存管理,以Pyhon的計(jì)數(shù)機(jī)制作為引入,介紹Pyhon的內(nèi)存管理方式,感興趣的朋友來看看吧2022-06-06