python光学仿真学习wxpython创建手速测试程序

滚动条是什么大家自然都是知道的,可以非常直观地显示数据的变化,或者可以非常方便地改变某些数值。

此前在介绍按钮、静态文本、输入文本这三个控件时,相对来说比较乏味,所以这次我们采用需求引导的模式。假如想编写一个软件用来检测打字速度,同时能够非常直观地通过滚动条来显示出来,应该怎么写?

我们大致需要三个控件,文本输入控件用来输入文字;静态文本控件用于显示速度;滚动条用来动态地显示速度。同时,还需要知道系统的时间,总之,代码如下

import wx
import time #时间模块
class testFrame(wx.Frame):
    def __init__(self, parent=None, title="test",size=(300,320)):
        wx.Frame.__init__(self,parent=parent, title=title,size=size)
        self.SetBackgroundColour(wx.Colour(222,222,222))
        self.timeStart=0
        self.count=0
        self.setText = wx.TextCtrl(self,value="input",
            pos=(10,10),size=(240,240),style=wx.TE_MULTILINE)
        self.ratioSlider = wx.Slider(self,
            minValue=0,maxValue=20,pos=(260,10),size=(20,220),
            style=wx.SL_VERTICAL|wx.SL_INVERSE)
        self.ratioLabel = wx.StaticText(self,-1,"0",
            pos=(260,240),size=(20,10))
        self.setText.Bind(wx.EVT_TEXT,self.onCount)
        self.setText.Bind(wx.EVT_TEXT_ENTER,self.onText)
    def onText(self,evt):
        self.count = 0              #敲击回车时,计数清零
        self.timeStart=time.time()  #当前时间,单位为秒
    def onCount(self,evt):
        self.count += 1
        if self.timeStart==0:
            self.timeStart = time.time()
        ratio = self.count/(time.time()-self.timeStart)
        self.ratioSlider.SetValue(ratio)
        self.ratioLabel.SetLabel(str(ratio))
if __name__ == '__main__':
    app = wx.App()
    frame = testFrame(title="test")
    frame.Show()
    app.MainLoop()

其结果如下图所示:

这个程序实现的并不是打字速度,而是手速。文本输入控件中的字符每改变一次,就算作一次有效操作,包括增加字符或者删除字符。通过字符变化的次数除以时间,来统计每秒敲击键盘的次数。当敲击回车时,计数清零,重新开始。

先来看初始化函数,定义了self.count用于计数,self.timeStart用于记录初始时间,时间模块在一些算法测试中可能会经常用到。

然后是多行文本输入控件,我们为其绑定了两个函数。onText为敲击回车时的事件响应,此时计数归零,并对初始时间重新赋值。onCount表示当内容发生变化时响应,通过计数变量除以时间差从而得到单位时间的操作次数。

然后定义了一个滚动条,minValue、maxValue这两个参数顾名思义,即最小值和最大值。style即风格,此前我们在定义输入文本框时也有提到,但这次定义的风格中多了一个"|"字符。

"|“字符代表或的意思,如果我们希望某个控件同时具备多种风格,即可以用”|"来连接。wx.Slider的风格还是多种多样的。我们所调用的两个风格分别表示:

  • wx.SL_VERTICAL 表示我们创建的是纵向的滑动条。默认为横向,其标志为wx.HORIZONTAL。
  • wx.SL_INVERSE 表示我们翻转最大值和最小值的方向。

以上就是python光学仿真学习使用wxpython创建手速测试程序的详细内容,更多关于wxpython创建手速测试程序的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python光学仿真学习处理高斯光束分布图像

    目录 通过python处理光斑图像 1 相关包与图像读取 2 图像截取 3显示强度 4数据拟合 问题 通过python处理光斑图像 1 相关包与图像读取 首先需要科学计算必备包numpy和画图包matplotlib.pyplot,我们通过后者进行图像数据的读取. plt.imread读取图片之后为数据格式为numpy数组,可以通过成员函数astype将整型数据变成浮点型,有利于后期处理. plt.imshow将img的数据加载到窗口,plt.show()显示绘图窗口,默认显示为伪彩图. pyth

  • python光学仿真相速度和群速度计算理解学习

    目录 波动模型 相速度 群速度 从编程的角度来说,波动光学在某些情况下可以简单地理解为在光线模型的基础上,引入一个相位项. 波动模型 一般来说,三个特征可以确定空间中的波场:频率.振幅和相位,故光波场可表示为: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D z = np.arange(15,200)*10 #单位为nm x = np.arange(15,200)

  • python光学仿真面向对象光学元件类的实现

    光学元件类 平面反射镜是一种极为简单的模型,因为我们只需要考虑一个平面即可.但是除此之外的其他光学元件,可能会变得有些复杂:我们必须考虑光在入射面和出射面的行为. 这当然是一句废话,而且我们也有了一个初步的解决方案:将光学元件拆成前表面和后表面即可.如果光需要在光学元件中反射多次,那就将光学元件拆成需要反射次数的表面个数即可,完美而无脑. 这说明我们已经熟悉了程序员的思维,我们眼中的世界已经不再是一个所见即所得的世界,我们看到的是一个个抽象零部件的表现.但是也不要惊慌,程序员和正常人也未必有很大

  • Python理解递归的方法总结

    递归 一个函数在执行过程中一次或多次调用其本身便是递归,就像是俄罗斯套娃一样,一个娃娃里包含另一个娃娃. 递归其实是程序设计语言学习过程中很快就会接触到的东西,但有关递归的理解可能还会有一些遗漏,下面对此方面进行更加深入的理解 递归的分类 这里根据递归调用的数量分为线性递归.二路递归与多重递归 线性递归 如果一个递归调用最多开始一个其他递归调用,我们称之为线性递归. 例如: def binary_search(data, target, low, high): """ 二分查

  • python光学仿真实现光线追迹折射与反射的实现

    目录 折射与反射 平面反射 平面折射 python实现 弧面问题 折射与反射 光线与光学元件相互作用,无非只有两件事,反射和透射.而就目前看来,我们所常用的光学元件,也无非有两种表面,即平面和球面,二维化之后就简化成了射线与线段,射线与劣弧的关系. 平面反射 无论从哪个角度来看,平面的反射折射都要比球面更简单,而反射问题要比折射问题更简单,所以,我们首先处理平面的反射问题. 反射定律即入射角等于反射角,心念及此,最为循规蹈矩的思路必然是先找到入射光线和平面的夹角,然后用这个夹角和平面(在二维空间

  • python光学仿真学习wxpython创建手速测试程序

    滚动条是什么大家自然都是知道的,可以非常直观地显示数据的变化,或者可以非常方便地改变某些数值. 此前在介绍按钮.静态文本.输入文本这三个控件时,相对来说比较乏味,所以这次我们采用需求引导的模式.假如想编写一个软件用来检测打字速度,同时能够非常直观地通过滚动条来显示出来,应该怎么写? 我们大致需要三个控件,文本输入控件用来输入文字:静态文本控件用于显示速度:滚动条用来动态地显示速度.同时,还需要知道系统的时间,总之,代码如下 import wx import time #时间模块 class te

  • Python光学仿真学习衍射算法初步理解

    对衍射最经典的解释是Huygens-Fresnel原理,Huygens认为波阵面上每一点都会成为新的波源,这些子波源的相互干涉就形成了衍射.这显然是一种离散的观点,仿佛是专门为程序员准备的一样. 假设一束光打在一个方形孔上,这个方形孔被细分成 n×n个网格,那么每个网格都相当于是一个小孔,而这些小孔的互相干涉,即为衍射.随着网格不断被细分,最终可以逼近真实的衍射情形.那么,假设矩孔处为等相位面,其网格坐标为  (i,j),到衍射屏距离为 d d d,那么对于衍射屏上任意一点P(x,y),其光强为

  • Python光学仿真学习Gauss高斯光束在空间中的分布

    目录 Gauss光束强度的表达式为 如图所示 左上图和左下图表示激光传输过程中的其束腰半径的变化情况:右图则表示高斯光束某一横截面处激光的能量分布. 绘制代码如下 import matplotlib.pyplot as plt import numpy as np def setLabel(ax,*args): ax.set_xlabel(args[0]) ax.set_ylabel(args[1]) if len(args)==3: ax.set_zlabel(args[2]) def dra

  • Python光学仿真wxpython透镜演示系统初始化与参数调节

    初始化与参数调节面板 这一节将绘制出如下图所示的参数调节面板 对于上图来说,BoxSizer布局十分傻瓜,所以这里主要有两个方面需要注意,其一是opti和source这两个选项卡的实现,其二则是如何同时创建多个滚动条. 对于前者比较容易,无非是多用一个控件而已,即wx.NoteBook,使用方法乏善可陈,看代码即可学会. 对于后者当然也可以很容易,只要无脑罗列即可,只不过对于五个不同的参数就意味着要新建五组滚动条,要就要新建五个控制函数,而这五个控制函数的功能几乎是完全一样的.显然,这很愚蠢,所

  • Python光学仿真wxpython之DC绘图

    一般来说,系统与绘图程序之间的信息交换是由图形设备接口(Graphics Device Interface,GDI)实现的,在wxpython中,通过device context(DC)对象来实现GDI的功能. DC对象的创建非常简单,只需引用wx.PaintDC即可,而后则可通过dc来设置画笔dc.SetPen,有了画笔,就可以进行图形绘制了.于是,我们再考虑到图形的属性,包括形状.颜色与边框等,更细致地说,是图形形状.填充颜色.边框类型.边框颜色. 我们可以通过一个矩形的例子来说明: 上面的

  • Python光学仿真wxpython透镜演示系统计算与绘图

    目录 计算与绘图 计算与绘图 这里的计算主要包括两个部分,分别是通过滚动条的参数得到光学器件的特征,这一点此前已经备述.其二则是光在传播过程中所产生的各种行为,反射折射函数也都已经讲过了,需要注意的就是确定边界. def getRay(self): self.rays,self.abcs,self.dots = [[],[],[]] sDot = self.source #光源为第一个点 sRay = rp.getABC(self.sourceDict['theta'],sDot) inPoin

  • Python光学仿真wxpython透镜演示系统框架

    透镜演示系统 框架 现在,我们可以做一个具备友好界面的透镜演示系统了.我们需要两个圆弧来表示透镜,一条线段表示主光轴,多条线段表示光线的传播路径.此外,还需要对光源和透镜的参数进行调节. 然而值得注意的一点是,我们在进行计算和画图过程中所用到的几何图形,在表达形式以及操作流程上可能并不相同.例如,对于光源发出的一条射线,它与透镜的作用流程为 寻找与透镜前表面的交点A 获取反射和透射直线 寻找透射直线与透镜后表面的交点B 计算透过透镜的直线 然而对于画图程序来说,光源S和A之间有一条线段,A和B之

  • Python光学仿真光的偏振编程理解学习

    目录 光的偏振 光的偏振 由于光波是横波,所以对于任意一个光波,其振幅方向与传播方向在一个固定的平面内.换言之,一束光波可以存在振幅方向不同的一群光波,对于其中一个光波而言,其振幅方向即为偏振方向. 可以画出其示意图 #偏振光演示 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D as axd def polarShow(): z = np.arange(0,5,0

随机推荐