Python學習之旅:用Python製作一個打字訓練小工具

来源:https://www.cnblogs.com/TM0831/archive/2019/09/13/11481198.html
-Advertisement-
Play Games

一、寫在前面 說道程式員,你會想到什麼呢?有人認為程式員象徵著高薪,有人認為程式員都是死肥宅,還有人想到的則是996和 ICU。 別人眼中的程式員:飛快的敲擊鍵盤、酷炫的切換屏幕、各種看不懂的字元代碼。 然而現實中的程式員呢?對於很多程式員來說,沒有百度和 Google 解決不了的問題,也沒有 ct ...


一、寫在前面

  說道程式員,你會想到什麼呢?有人認為程式員象徵著高薪,有人認為程式員都是死肥宅,還有人想到的則是996和 ICU。

  

  別人眼中的程式員:飛快的敲擊鍵盤、酷炫的切換屏幕、各種看不懂的字元代碼。

  然而現實中的程式員呢?對於很多程式員來說,沒有百度和 Google 解決不了的問題,也沒有 ctrl + c 和 ctrl + v 實現不了的功能。

   

  那麼身為一個程式員,要怎麼讓自己看起來更加“專業”呢?答案就是加快自己的打字速度了,敲的代碼可能是錯的,但這個13卻是必須裝的!

  然而還是有不少人打字不那麼快的,可能就需要訓練下了,但是既然身為程式員,為何不自己寫一個訓練打字的小工具出來呢?

 

二、基本思路

  使用 PyQT5 開發 GUI,實現顯示句子並讓用戶輸入,然後將輸入的內容和給出的句子進行比對,同時記錄所用的時間,最後將正確率輸出來。為了能夠持續打字輸入,還需要做一個“下一句”的功能。在實現了這兩個基本的功能後,一個簡單的打字訓練小工具就做出來了。

 

三、界面設計

1.環境配置

  PyQT5 的開發環境配置在上一篇博客中已經說過了,因而這裡不再贅述,如果不清楚的可以點這裡查看。

2.界面設計

   要進行界面設計,得先打開 QtDesigner,然後新建項目,選擇 Widget:

   

   然後就往裡面拖控制項就好了,這還是很方便的,主要用的控制項包括 Label、Text Edit、Push Button等,雙擊控制項之後可以在右側修改控制項的各種屬性。最終設計出的界面如下:

   

3.生成 Python 代碼

  在設計完界面之後,將生成的結果保存下來,會得到一個 .ui 為尾碼的文件。這個文件我們還是無法直接使用的,需要轉變成 Python 代碼才行。此時就需要使用 pyuic5 命令了,不懂的可以點這裡查看我的上篇博客。

 

四、槽函數

 1.槽函數簡介

  要進行功能設計,就得先知道槽函數。槽是普通的 C++ 成員函數,槽在 Qt 開發軟體中是一個很重要的概念,在 Qt 里與信號連接的就是槽,我們一般稱之為槽函數。

  在使用信號的時候,有四個參數:

  1)sender:發出信號的對象;

  2)signal:發送對象發出的信號;

  3)receiver:接收信號的對象;

  4)slot:接收對象在接收到信號之後所需要調用的函數(槽函數)。

2.使用方法

(1)第一種方法

  第一步,在 QtDesigner 中點擊 “Edit Signals/Slots”,然後左鍵點擊按鈕後將滑鼠拖到另一個 Label 上:

  

   第二步,在彈出的設置框中選擇具體的方法及功能。

  

   這樣做很簡單,但是也有缺陷,問題在於不能自定義方法,只能使用給定的方法。

(2)第二種方法

  在右下角找到 “Signal/Slot Editor” 並點擊,然後就可以點擊 “+” 創建信號了。

  

   這種方法能夠讓我們自定義了,但是也不算方便,尤其是當你不知道具體要實現什麼方法的時候。

(3)第三種方法

  使用 connect() 方法,傳入的參數為一個方法名稱。例如:

btn.clicked.connect(func)

 

五、功能實現

1.繼承函數

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

 1 import sys
 2 from PyQt5 import QtWidgets
 3 from typing.ui import Ui_Form
 4 
 5 
 6 class MyForm(Ui_Form, QtWidgets.QWidget):
 7     def __init__(self):
 8         super(MyForm, self).__init__()
 9         self.setupUi(self)
10 
11 
12 if __name__ == '__main__':
13     app = QtWidgets.QApplication(sys.argv)
14     my_form = MyForm()
15     my_form.show()
16     sys.exit(app.exec_())

2.隱藏顯示控制項

  有時候我們可能會需要將某些控制項隱藏起來,這裡簡單介紹幾種方法。

  1)setHidden(bool)    設置控制項是否隱藏;

  2)hide() 隱藏控制項;

  這兩種隱藏的方法會完全隱藏控制項,即不保留控制項所占的位置。但如果要保留位置的話,可以使用下麵這種方法:

# 將透明度設置為0,達到隱藏且保留位置的目的
op = QtWidgets.QGraphicsOpacityEffect()
op.setOpacity(0)
self.lable.setGraphicsEffect(op)

3.判斷輸入內容 

  這一功能的實現需要在點擊“提交”按鈕時獲取輸入框中的內容,再和給出的文本進行對比,最後將結果返回顯示出來。

 1 def click(self):
 2     """
 3     點擊按鈕時調用
 4     :return: 
 5     """
 6     self.get_time()
 7     the_input = self.textEdit.toPlainText()
 8     # 計算準確率
 9     count = 0
10     for i in range(len(the_input)):
11         if the_input[i] == self.text[i]:
12             count += 1
13     accuracy = count / len(self.text) * 100
14     # print(accuracy)
15     self.show_label()
16     # 設置提示信息
17     info = "有點可惜,你的正確率是:  %.2f%%  " % accuracy if accuracy != 100 else "恭喜你全對了呢!繼續加油哦!"
18     self.info_lable.setText(info)

  對於我這種懶人來說,點擊按鈕這種操作都是費力的,所以最好加入一個快捷鍵,這樣就方便多了,可以使用如下方法設置:

# 設置快捷鍵
self.submit_btn.setShortcut('ctrl+e')

 

六、運行結果

  最終運行結果的截圖如下:

  

   提交之後還可以點擊下一句繼續訓練:

  

 

  完整代碼已上傳到 GitHub


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ​ 路由獨立守衛,顧名思義就是這個路由自己的守衛任務,就如同咱們LOL,我們守衛的就是獨立一條路,保證我們這條路不要被敵人攻剋(當然我們也得打團配合) 在官方定義是這樣說的:你可以在路由配置上直接定義 beforeEnter 守衛,這些守衛與全局前置守衛的方法參數是一樣的。 參數如下: 我們在這裡使 ...
  • 前言: 對於大多數前端同學來說閉包一直是個很讓人困惑的問題,我自己之前雖說在項目中有意無意的用到但是都沒有刻意的去深入研究它,大部分時間是為了應付面試。後來某一天我突然意識到自己要去認真研究下它,因為知其然而不知其所以然並不應該是學習一種語言的態度,所以我打算寫篇文章嘗試著用我自己的理解去解釋下閉包 ...
  • 工廠設計模式: 顧名思義,該模式是用來生產對象的。在面向對象的設計模式中,萬物皆對象,若使用new來創建對象,就會對該對象產生強耦合,加入我們需要更換該對象,那麼使用該對象的對象都需要進行修改,這顯然違背了開閉原則(OCP)。如果我們使用工廠來產生對象,我們只需要與這個工廠打交道就可以了,無需關心具 ...
  • 早期的電腦通信需要有一個中間件,A要給B傳東西,A必須要把信息傳給中間件,B再把從中間件中拿到信息 由於不同機器之間需要通信就產生了網路 軟體開發的架構 1.C/S架構 伺服器-客戶機,即Client-Server架構,C/S架構通常採取兩層結構.Sever負責數據的管理,Client負責完成與用 ...
  • PHP+Nginx環境搭建 作者:王宇陽( Mirror )^_^ 參考文章: ​ "Nginx+PHP+MySQL安裝參考" ​ "PHP源碼安裝經驗" ​ "PHP源碼環境搭建過程中常見問題" CentOS環境 配置CentOS 7網路: CentOS(最小安裝)預設是不打開網路的 啟動網路 v ...
  • 1、在GitHub上建一個新倉庫 ​ 2、配置Git的SSH KEY 生成SSH添加到GitHub 回到你的git bash中, git config global user.name "yourname" git config global user.email "youremail" 這裡的yo ...
  • 多進程 python中創建進程模塊為: 進程之間數據不是共用的 註意:windowns下進程運行會報錯,linux mac 不會出現此問題。解決方法: 將進程啟動代碼放到main里即可執行,示例代碼: 進程常用方法: :和線程一樣,預設會等子進程執行完畢後,代碼才會繼續往下執行 : True 為 主 ...
  • 1、安裝 Git 和 nodejs "https://hexo.io/zh cn/docs/" ​ 2 安裝Hexo "https://hexo.io/zh cn/" ​ 3、更換伊卡洛斯主題 "https://github.com/ppoffice/hexo theme icarus" ​ 配置新 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...