使用Python制作一个打字训练小工具


Posted in Python onOctober 01, 2019

一、写在前面

说道程序员,你会想到什么呢?有人认为程序员象征着高薪,有人认为程序员都是死肥宅,还有人想到的则是996和 ICU。

使用Python制作一个打字训练小工具

别人眼中的程序员:飞快的敲击键盘、酷炫的切换屏幕、各种看不懂的字符代码。

然而现实中的程序员呢?对于很多程序员来说,没有百度和 Google 解决不了的问题,也没有 ctrl + c 和 ctrl + v 实现不了的功能。

使用Python制作一个打字训练小工具

那么身为一个程序员,要怎么让自己看起来更加“专业”呢?答案就是加快自己的打字速度了,敲的代码可能是错的,但这个13却是必须装的!

然而还是有不少人打字不那么快的,可能就需要训练下了,但是既然身为程序员,为何不自己写一个训练打字的小工具出来呢?

二、基本思路

使用 PyQT5 开发 GUI,实现显示句子并让用户输入,然后将输入的内容和给出的句子进行比对,同时记录所用的时间,最后将正确率输出来。为了能够持续打字输入,还需要做一个“下一句”的功能。在实现了这两个基本的功能后,一个简单的打字训练小工具就做出来了。

三、界面设计

1.环境配置

PyQT5 的开发环境配置在上一篇博客中已经说过了,因而这里不再赘述,如果不清楚的可以点这里查看。

2.界面设计

要进行界面设计,得先打开 QtDesigner,然后新建项目,选择 Widget:

使用Python制作一个打字训练小工具

然后就往里面拖控件就好了,这还是很方便的,主要用的控件包括 Label、Text Edit、Push Button等,双击控件之后可以在右侧修改控件的各种属性。最终设计出的界面如下:

使用Python制作一个打字训练小工具

3.生成 Python 代码

在设计完界面之后,将生成的结果保存下来,会得到一个 .ui 为后缀的文件。这个文件我们还是无法直接使用的,需要转变成 Python 代码才行。此时就需要使用 pyuic5 命令了,不懂的可以点这里查看我的上篇博客。

四、槽函数

1.槽函数简介

要进行功能设计,就得先知道槽函数。槽是普通的 C++ 成员函数,槽在 Qt 开发软件中是一个很重要的概念,在 Qt 里与信号连接的就是槽,我们一般称之为槽函数。

在使用信号的时候,有四个参数:

1)sender:发出信号的对象;

2)signal:发送对象发出的信号;

3)receiver:接收信号的对象;

4)slot:接收对象在接收到信号之后所需要调用的函数(槽函数)。

2.使用方法

(1)第一种方法

第一步,在 QtDesigner 中点击 “Edit Signals/Slots”,然后左键点击按钮后将鼠标拖到另一个 Label 上:

使用Python制作一个打字训练小工具

第二步,在弹出的设置框中选择具体的方法及功能。

使用Python制作一个打字训练小工具

这样做很简单,但是也有缺陷,问题在于不能自定义方法,只能使用给定的方法。

(2)第二种方法

在右下角找到 “Signal/Slot Editor” 并点击,然后就可以点击 “+” 创建信号了。

使用Python制作一个打字训练小工具

这种方法能够让我们自定义了,但是也不算方便,尤其是当你不知道具体要实现什么方法的时候。

(3)第三种方法

使用 connect() 方法,传入的参数为一个方法名称。例如:

btn.clicked.connect(func)

五、功能实现

1.继承函数

使用 pyuic5 生成 py 文件中定义了一个 Ui_Form 类,其中包含了对各种控件的定义等,如果我们要增加其他功能,且直接在这个 py 文件中修改的话,那么之后要更新界面之类的就不会不方便了,所以最好的方法是继承 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.隐藏显示控件

有时候我们可能会需要将某些控件隐藏起来,这里简单介绍几种方法。

1)setHidden(bool) 设置控件是否隐藏;

2)hide() 隐藏控件;

这两种隐藏的方法会完全隐藏控件,即不保留控件所占的位置。但如果要保留位置的话,可以使用下面这种方法:

def click(self):
   """
   点击按钮时调用
   :return: 
   """
   self.get_time()
   the_input = self.textEdit.toPlainText()
   # 计算准确率
   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()
   # 设置提示信息
   info = "有点可惜,你的正确率是: %.2f%% " % accuracy if accuracy != 100 else "恭喜你全对了呢!继续加油哦!"
   self.info_lable.setText(info)

3.判断输入内容

这一功能的实现需要在点击“提交”按钮时获取输入框中的内容,再和给出的文本进行对比,最后将结果返回显示出来。

1 def click(self): 2 """ 3 点击按钮时调用 4 :return: 5 """ 6 self.get_time() 7 the_input = self.textEdit.toPlainText() 8 # 计算准确率 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 # 设置提示信息17 info = "有点可惜,你的正确率是: %.2f%% " % accuracy if accuracy != 100 else "恭喜你全对了呢!继续加油哦!"18 self.info_lable.setText(info)

对于我这种懒人来说,点击按钮这种操作都是费力的,所以最好加入一个快捷键,这样就方便多了,可以使用如下方法设置:

# 设置快捷键
self.submit_btn.setShortcut('ctrl+e')

六、运行结果

最终运行结果的截图如下:

使用Python制作一个打字训练小工具

提交之后还可以点击下一句继续训练:

使用Python制作一个打字训练小工具

完整代码已上传到 GitHub!

总结

以上所述是小编给大家介绍的使用Python制作一个打字训练小工具,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
Python抓取京东图书评论数据
Aug 31 Python
Python实现HTTP协议下的文件下载方法总结
Apr 20 Python
Python实现的购物车功能示例
Feb 11 Python
python3+PyQt5实现自定义窗口部件Counters
Apr 20 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
Python自动抢红包教程详解
Jun 11 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
用python写测试数据文件过程解析
Sep 25 Python
python中@contextmanager实例用法
Feb 07 Python
python 制作网站小说下载器
Feb 20 Python
Python实现文字pdf转换图片pdf效果
Apr 03 Python
Python + Flask 实现简单的验证码系统
Oct 01 #Python
python 矢量数据转栅格数据代码实例
Sep 30 #Python
python多进程间通信代码实例
Sep 30 #Python
Python实现二叉树的最小深度的两种方法
Sep 30 #Python
python打开使用的方法
Sep 30 #Python
python 字典有序并写入json文件过程解析
Sep 30 #Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
Sep 30 #Python
You might like
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
PHP查询网站的PR值
2013/10/30 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
PHP实现小偷程序实例
2016/10/31 PHP
PHP培训要多少钱
2017/06/06 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
php链式操作的实现方式分析
2019/08/12 PHP
xss文件页面内容读取(解决)
2010/11/28 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
微信小程序中显示倒计时代码实例
2019/05/09 Javascript
python使用wxpython开发简单记事本的方法
2015/05/20 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
python使用turtle库绘制时钟
2020/03/25 Python
PyQt5组件读取参数的实例
2019/06/25 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
2019/08/23 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
如何执行一个shell程序
2012/11/23 面试题
餐厅采购员岗位职责
2014/03/06 职场文书
商业融资计划书
2014/04/29 职场文书
北京奥运会口号
2014/06/21 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
护士求职自荐信
2015/03/25 职场文书