之前写过一系列的tkinter库控件的使用方法以及tkinter的三种布局方法。
但是并没有做过什么实际的案例,主要原因是因为使用tikinter做界面比较麻烦,没有可视化的设计来的快,就像我之前用的QT设计工具,就非常方便。
如果做一些简单的界面,使用tkinter还是很方便的,毕竟是python自带的库。
今天将会做下面这样的一个计算器,可以实现基本的加减程序的运算,整体代码逻辑比较简单,主要是一个回调函数的理解。
1.UI界面布局
2.功能函数实现
3.重构布局代码
4.按钮回调函数绑定
实现基本窗口
创建父窗口app,设置几何尺寸400x400,设置标题,最后循环就实现最简单的框架了。
添加控件
控件这里主要标签和按钮,先来看添加一个标签和一个按钮。
里面的控件属性都是为了让控件显示在正好的位置,添加两个控件还是很简单的,但是我们有很多控件,如果还是用上面的方法就会非常麻烦,通过观察可以知道,每个按钮除了位置和按钮的文字不一样,其它都是一模一样的,所以这里我们可以使用循环来设置。
界面实现了,接下来就是实现计算器的功能。
功能1:按下数字和运算符按钮,按钮的文字内容显示到标签。
功能2:按下清空按钮,将标签的内容全部置空删除。
功能3:按下退格按钮,标签往回删除一个内容。
功能4:按下等于按钮直接计算结果并显示在标签区。
先创建display变量,用来表示label的字符内容。set_content是实现功能1的,当我们按下某个按钮,就将按钮值传递给这个方法,这个方法会先通过display.get获取当前标签的内容,然后和text拼接到一起,最后重新放在到标签里面。
按下清空按钮就调用clear方法,直接将标签内容设为空;
按下退格就是先获取当前的标签内容,然后通过切片的方式获取除掉最后一个字符的内容,最后将当前内容传递给display,从而实现退格效果。
等于按钮按下就调用calculate方法,先获取当前标签的内容,通过eval方法计算结果,最后将算式和结果拼接成一个字符串返回给label显示,过程中如果出现错误异常,就显示error。
方法都定义好了,但是按钮都是循环实现的,如果直接绑定回调函数肯定不行,因为只能绑定一个,根据上面的功能,按钮要分为4类。所以这里在循环显示按钮的时候进行分类,为之后绑定不同方法做准备,具体更改完代码如下。
最后给不同类型按钮绑定上对应方法即可。等于,清空,退格都比较好理解,直接绑定方法,而功能1的数值和运算符号的相对复杂一定,因为回调需要传递参数,但是一般的写法是无法传递参数的,所以这里通过匿名函数构建了一个新函数,把之前的函数作为匿名函数表达式,这样就可以传递参数了。
大功告成。
(全文完)