最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python制作一個(gè)打字訓(xùn)練小工具

 更新時(shí)間:2019年10月01日 10:37:24   作者:TM0831  
這篇文章主要介紹了用Python制作一個(gè)打字訓(xùn)練小工具,本文通過(guò)實(shí)例代碼的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、寫(xiě)在前面

  說(shuō)道程序員,你會(huì)想到什么呢?有人認(rèn)為程序員象征著高薪,有人認(rèn)為程序員都是死肥宅,還有人想到的則是996和 ICU。

  

  別人眼中的程序員:飛快的敲擊鍵盤(pán)、酷炫的切換屏幕、各種看不懂的字符代碼。

  然而現(xiàn)實(shí)中的程序員呢?對(duì)于很多程序員來(lái)說(shuō),沒(méi)有百度和 Google 解決不了的問(wèn)題,也沒(méi)有 ctrl + c 和 ctrl + v 實(shí)現(xiàn)不了的功能。

  

  那么身為一個(gè)程序員,要怎么讓自己看起來(lái)更加“專(zhuān)業(yè)”呢?答案就是加快自己的打字速度了,敲的代碼可能是錯(cuò)的,但這個(gè)13卻是必須裝的!

  然而還是有不少人打字不那么快的,可能就需要訓(xùn)練下了,但是既然身為程序員,為何不自己寫(xiě)一個(gè)訓(xùn)練打字的小工具出來(lái)呢?

二、基本思路

  使用 PyQT5 開(kāi)發(fā) GUI,實(shí)現(xiàn)顯示句子并讓用戶(hù)輸入,然后將輸入的內(nèi)容和給出的句子進(jìn)行比對(duì),同時(shí)記錄所用的時(shí)間,最后將正確率輸出來(lái)。為了能夠持續(xù)打字輸入,還需要做一個(gè)“下一句”的功能。在實(shí)現(xiàn)了這兩個(gè)基本的功能后,一個(gè)簡(jiǎn)單的打字訓(xùn)練小工具就做出來(lái)了。

三、界面設(shè)計(jì)

1.環(huán)境配置

  PyQT5 的開(kāi)發(fā)環(huán)境配置在上一篇博客中已經(jīng)說(shuō)過(guò)了,因而這里不再贅述,如果不清楚的可以點(diǎn)這里查看。

2.界面設(shè)計(jì)

  要進(jìn)行界面設(shè)計(jì),得先打開(kāi) QtDesigner,然后新建項(xiàng)目,選擇 Widget:

  

  然后就往里面拖控件就好了,這還是很方便的,主要用的控件包括 Label、Text Edit、Push Button等,雙擊控件之后可以在右側(cè)修改控件的各種屬性。最終設(shè)計(jì)出的界面如下:

  

3.生成 Python 代碼

  在設(shè)計(jì)完界面之后,將生成的結(jié)果保存下來(lái),會(huì)得到一個(gè) .ui 為后綴的文件。這個(gè)文件我們還是無(wú)法直接使用的,需要轉(zhuǎn)變成 Python 代碼才行。此時(shí)就需要使用 pyuic5 命令了,不懂的可以點(diǎn)這里查看我的上篇博客。

四、槽函數(shù)

1.槽函數(shù)簡(jiǎn)介

  要進(jìn)行功能設(shè)計(jì),就得先知道槽函數(shù)。槽是普通的 C++ 成員函數(shù),槽在 Qt 開(kāi)發(fā)軟件中是一個(gè)很重要的概念,在 Qt 里與信號(hào)連接的就是槽,我們一般稱(chēng)之為槽函數(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è)置框中選擇具體的方法及功能。

  

  這樣做很簡(jiǎn)單,但是也有缺陷,問(wèn)題在于不能自定義方法,只能使用給定的方法。

(2)第二種方法

  在右下角找到 “Signal/Slot Editor” 并點(diǎn)擊,然后就可以點(diǎn)擊 “+” 創(chuàng)建信號(hào)了。

  

  這種方法能夠讓我們自定義了,但是也不算方便,尤其是當(dāng)你不知道具體要實(shí)現(xiàn)什么方法的時(shí)候。

(3)第三種方法

  使用 connect() 方法,傳入的參數(shù)為一個(gè)方法名稱(chēng)。例如:

btn.clicked.connect(func)

五、功能實(shí)現(xiàn)

1.繼承函數(shù)

  使用 pyuic5 生成 py 文件中定義了一個(gè) Ui_Form 類(lèi),其中包含了對(duì)各種控件的定義等,如果我們要增加其他功能,且直接在這個(gè) py 文件中修改的話,那么之后要更新界面之類(lèi)的就不會(huì)不方便了,所以最好的方法是繼承 Ui_Form 類(lèi),然后在繼承類(lèi)中添加修改。參考代碼如下:

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ì)需要將某些控件隱藏起來(lái),這里簡(jiǎn)單介紹幾種方法。

  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é)果返回顯示出來(lái)。

復(fù)制代碼 代碼如下:
1 def click(self): 2 """ 3 點(diǎn)擊按鈕時(shí)調(diào)用 4 :return: 5 """ 6 self.get_time() 7 the_input = self.textEdit.toPlainText() 8 # 計(jì)算準(zhǔn)確率 9 count = 010 for i in range(len(the_input)):11 if the_input[i] == self.text[i]:12 count += 113 accuracy = count / len(self.text) * 10014 # print(accuracy)15 self.show_label()16 # 設(shè)置提示信息17 info = "有點(diǎn)可惜,你的正確率是: %.2f%% " % accuracy if accuracy != 100 else "恭喜你全對(duì)了呢!繼續(xù)加油哦!"18 self.info_lable.setText(info)

  對(duì)于我這種懶人來(lái)說(shuō),點(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ì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

  • 使用pip下載時(shí)提示"You?are?using?pip?version?8.1.1,?however?version?22.1?is?available."錯(cuò)誤解決

    使用pip下載時(shí)提示"You?are?using?pip?version?8.1.1,?howev

    最近在使用python的pip下載庫(kù)時(shí),出現(xiàn)了報(bào)錯(cuò),所以下面這篇文章主要給大家介紹了關(guān)于使用pip下載時(shí)提示“You?are?using?pip?version?8.1.1,?however?version?22.1?is?available.“錯(cuò)誤的解決方法,需要的朋友可以參考下
    2022-08-08
  • Python成功解決ZeroDivisionError:?division?by?zero的方法過(guò)程

    Python成功解決ZeroDivisionError:?division?by?zero的方法過(guò)程

    在Python編程中,ZeroDivisionError:divisionbyzero是因?yàn)閲L試除以零所導(dǎo)致的常見(jiàn)錯(cuò)誤,這篇文章詳細(xì)介紹了錯(cuò)誤的原因、解決方案,需要的朋友可以參考下
    2024-09-09
  • 利用Python第三方庫(kù)實(shí)現(xiàn)預(yù)測(cè)NBA比賽結(jié)果

    利用Python第三方庫(kù)實(shí)現(xiàn)預(yù)測(cè)NBA比賽結(jié)果

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著利用Python實(shí)現(xiàn)預(yù)測(cè)NBA比賽結(jié)果展開(kāi),文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • Python虛擬環(huán)境與依賴(lài)管理使用方法全指南

    Python虛擬環(huán)境與依賴(lài)管理使用方法全指南

    這篇文章主要介紹了如何使用虛擬環(huán)境和pip來(lái)管理Python項(xiàng)目的依賴(lài)和包版本,虛擬環(huán)境可以幫助隔離不同項(xiàng)目的依賴(lài),避免版本沖突,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • Python中DrissionPage的示例代碼

    Python中DrissionPage的示例代碼

    DrissionPage是一款集成了Selenium和Requests功能的Python庫(kù),本文就來(lái)介紹一下DrissionPage的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Python利用正則表達(dá)式匹配并截取指定子串及去重的方法

    Python利用正則表達(dá)式匹配并截取指定子串及去重的方法

    這篇文章主要介紹了Python利用正則表達(dá)式匹配并截取指定子串及去重的方法,涉及Python正則表達(dá)式匹配及字符串截取操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • python 讀取以空格分開(kāi)的文件操作

    python 讀取以空格分開(kāi)的文件操作

    這篇文章主要介紹了python 讀取以空格分開(kāi)的文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Python中的Joblib庫(kù)使用學(xué)習(xí)總結(jié)

    Python中的Joblib庫(kù)使用學(xué)習(xí)總結(jié)

    這篇文章主要介紹了Python中的Joblib庫(kù)使用學(xué)習(xí)總結(jié),Joblib是一組在Python中提供輕量級(jí)流水線的工具,Joblib已被優(yōu)化得很快速,很健壯了,特別是在大數(shù)據(jù)上,并對(duì)numpy數(shù)組進(jìn)行了特定的優(yōu)化,需要的朋友可以參考下
    2023-08-08
  • python 爬取微信文章

    python 爬取微信文章

    本文給大家分享的是使用python通過(guò)搜狗入口,爬取微信文章的小程序,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下
    2016-01-01
  • python實(shí)現(xiàn)壁紙批量下載代碼實(shí)例

    python實(shí)現(xiàn)壁紙批量下載代碼實(shí)例

    本篇文章通過(guò)代碼實(shí)例給大家分享了用python實(shí)現(xiàn)壁紙批量下載這個(gè)功能,有興趣的朋友參考下吧。
    2018-01-01

最新評(píng)論

临泽县| 西峡县| 芦溪县| 敖汉旗| 怀集县| 扶沟县| 建阳市| 武汉市| 修武县| 界首市| 甘南县| 普安县| 宁阳县| 临西县| 南靖县| 报价| 巴彦淖尔市| 长治市| 南木林县| 新竹县| 兰考县| 逊克县| 崇信县| 双流县| 衡阳县| 蓬溪县| 东丽区| 县级市| 襄垣县| 田东县| 石棉县| 冕宁县| 河北区| 会东县| 内丘县| 资溪县| 黎城县| 万山特区| 江孜县| 永仁县| 望江县|