实验10简单计算器.docx
《实验10简单计算器.docx》由会员分享,可在线阅读,更多相关《实验10简单计算器.docx(14页珍藏版)》请在冰豆网上搜索。
实验10简单计算器
实验十简单计算器
【实验名称】
简单计算器
【实验目的】
1、了解常用的GUI;
2、熟悉tkinter布局方法;
3、熟悉tkinterAPI使用;
4、编写简单的GUI程序
【实验要求】
1、Tkinter模块函数使用;
2、熟悉tkinter布局方法;
3、tkinter事件和信号连接
【背景描述】
本节将对图形用户界面(GraphicalUserInterface,GUI)编程进行简要的介绍。
无论你刚
接解本领域,还是希望学到更多相关知识,亦或是想要看到Python中是如何实现的,本章都
会正合你意。
这短短的一章不可能展示所有GUI应用开发的东西,但是会为你奠定一个坚实
的基础。
我们将主要使用的GUI工具包是Python默认的GUI库Tk,通过Python的接口Tkinter
(“Tkinterface”的缩写)可以访问Tk。
Tk并不是最新和最好的,也没有包含最强大的GUI构建模块集,但是它足够易用,你可以使用它构建能够运行在大多数平台下的GUI。
【知识准备】
掌握和熟悉Python基本语法,常见数据类和操作,会用pdb调试Python程序。
【实验设备】
Windows或Linux或MacOS的操作系统的计算机。
本实验提供win7系统。
【实验说明】
为了开发方便,本人用IDLE做为实验教学和模拟环境,不再在CMD下操作。
最好有点GUI程序知识。
【实验环境】
系统:
Windows764位旗舰版,
Python版本:
Python3.5.3
开发工具:
IDLE集成开发环境。
【实验步骤】
在windows764位旗舰版安装python3,并执行命令和脚本。
第一步:
认识tkinter程序结构
那么为了让tkinter成为应用的一部分,你需要做些什么呢?
首先,已经存在的应用并不
是必需的。
如果你愿意,可以创建一个纯GUI程序,不过没有让人感兴趣的底层功能的程序
不会有什么用处。
让GUI程序启动和运行起来需要以下5个主要步骤。
1.导入tkinter模块(或fromtkinterimport*)。
2.创建一个顶层窗口对象,用于容纳整个GUI应用。
3.在顶层窗口对象之上(或者“其中”)构建所有的GUI组件(及其功能)。
4.通过底层的应用代码将这些GUI组件连接起来。
5.进入主事件循环。
第二步:
使用tkinter.Tk()生成主窗口(root=tkinter.Tk())
root.title('标题名') 修改框体的名字,也可在创建时使用className参数来命名;
root.resizable(0,0) 框体大小可调性,分别表示x,y方向的可变性;
root.geometry('250x150') 指定主框体大小;
root.quit() 退出;
root.update_idletasks()
root.update() 刷新页面;
初级样例:
importtkinter
root=tkinter.Tk()#生成root主窗口
label=tkinter.Label(root,text='Hello,GUI')#生成标签
label.pack()#将标签添加到主窗口
button1=tkinter.Button(root,text='Button1')#生成button1
button1.pack(side=tkinter.LEFT)#将button1添加到root主窗口
button2=tkinter.Button(root,text='Button2')
button2.pack(side=tkinter.RIGHT)
root.mainloop()#进入消息循环(必需组件)
第三步:
tkinter中的15种核心组件
Button 按钮;
Canvas 绘图形组件,可以在其中绘制图形;
Checkbutton复选框;
Entry 文本框(单行);
Text文本框(多行);
Frame 框架,将几个组件组成一组
Label 标签,可以显示文字或图片;
Listbox 列表框;
Menu 菜单;
Menubutton它的功能完全可以使用Menu替代;
Message与Label组件类似,但是可以根据自身大小将文本换行;
Radiobutton单选框;
Scale 滑块;允许通过滑块来设置一数字值
Scrollbar滚动条;配合使用canvas,entry,listbox,andtext窗口部件的标准滚动条;
Toplevel用来创建子窗口窗口组件。
(在Tkinter中窗口部件类没有分级;所有的窗口部件类在树中都是兄弟。
)
实例如下:
#-*-coding:
UTF-8-*-
fromtkinterimport*#导入Tkinter库
root=Tk()#创建窗口对象的背景色
#创建两个列表
li=['C','python','php','html','SQL','java']
movie=['CSS','jQuery','Bootstrap']
listb=Listbox(root)#创建两个列表组件
listb2=Listbox(root)
foriteminli:
#第一个小部件插入数据
listb.insert(0,item)
foriteminmovie:
#第二个小部件插入数据
listb2.insert(0,item)
listb.pack()#将小部件放置到主窗口中
listb2.pack()
root.mainloop()#进入消息循环
第四步:
控件标准属性
标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。
属性
描述
Dimension
控件大小;
Color
控件颜色;
Font
控件字体;
Anchor
锚点;
Relief
控件样式;
Bitmap
位图;
Cursor
光标;
实例如下
importtkinterastk
window=tk.Tk()
window.title('test')
window.geometry('400x400')#设置主界面大小
btn1=tk.Button(window,text='one',width=5,bg='green')#设置button属性
btn1.pack()
btn2=tk.Button(window,text='two',width=5,height=5,bg='red')#设置button属性
btn2.pack()
btn3=tk.Button(window,text='three',width=3,height=3,bg='blue')#设置button属性
btn3.pack()
btn4=tk.Button(window,text='four',width=15,height=10,bg='yellow')#设置button属性
btn4.pack()
window.mainloop()
第五步:
几何管理
Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,一下是Tkinter公开的几何管理类:
包、网格、位置
几何方法
描述
pack()
包装;
grid()
网格;
place()
位置;
实例如下:
importtkinterastk
window=tk.Tk()
window.title('test')
window.geometry('400x400')
btn1=tk.Button(window,text='one',width=5,bg='green')
btn1.grid(row=0,column=0)
btn2=tk.Button(window,text='two',width=5,height=5,bg='red')
btn2.grid(row=0,column=1)
btn3=tk.Button(window,text='three',width=3,height=3,bg='blue')
btn3.grid(row=1,column=0)
btn4=tk.Button(window,text='four',width=15,height=10,bg='yellow')
btn4.grid(row=1,column=1)
window.mainloop()
第六步:
事件绑定
一个Tkinter主要跑在mainloop进程里。
Events可能来自多个地方,比如按键,鼠标,或是系统事件。
Tkinter提供了丰富的方法来处理这些事件。
对于每一个控件Widget,你都可以为其绑定方法function。
通过command属性给button绑定事件
目的:
点击一下按扭,在窗口中出现一行字
第一种方法(command):
fromTkinterimport*
defp_label():
globalroot
Lb=Label(root,text='我爱python')
Lb.pack()
root=Tk()
B_n=Button(root,text='点我',command=p_label)#command后面不能有任何的标点符号
B_n.pack()
root.mainloop()
第二种方法(bind):
1、bind的第一个参数是事件类型,它采用的描述方式是这样的:
,这里的MODIFIER即修饰符,它的全部取值如下:
Control,Mod2,M2,Shift,Mod3,M3,Lock,Mod4,M4,Button1,B1,Mod5,M5Button2,B2,Meta,M,Button3,B3,Alt,Button4,B4,Double,Button5,B5Triple,Mod1,M1。
而第三个TYPE表示类型,它的全部取值如下:
Activate,Enter,Map,ButtonPress,Button,Expose,Motion,辛星2014年度辛星tkinter教程第二版tkinter25/103ButtonRelease,FocusIn,MouseWheel,Circulate,FocusOut,Property,Colormap,GravityReparent,Configure,KeyPress,Key,Unmap,Deactivate,KeyReleaseVisibility,Destroy,Leave。
第三个参数表示细节,其实也就是对第二个参数的一些辅助说明。
2、第二个参数可以是一个函数名,记住,不要加任何的标点符号,否则运行时会报错的。
第四步:
计算器实现
实例分析
第3行,导入相应的包。
第5-11,定义主界面和主界面标题、大小和输入过程中字符串表达式、结果和符号。
第13行,定义输入的按键值类。
第17-19行,按加按键时,字符串连接
第20-22行,按退格键时消除前面的字符。
第23-27行,按清理按键时,清除结果和符号
第28-36行,按+-号时,设置数字和表达式
第37-44行,按小数点时,设置数字和表达式
第45-77行,按等于键时,根据表达式计算值,并显示
第79-81行,定义复制键。
第83-148行,利用格栅grid布局来给计算器界面布局
第149-163行,定义菜单项和子菜单。
第166-168行,程序调用