五笔打字通主页
这篇文章讲讲用2种方法来做一个华氏度和摄氏度的转换。这个程序并不难,用我们学过的丁点tkinter知识也可以做出来,我用2种方法来做,主要是帮大家来温习和巩固一下前面学习的知识。
第1种方法是不用变量的方式来做,第2种方法是用变量的追踪方法trace()来做。
这种方法不用变量追踪方法,就只能通过一个“转换确定”按钮来转换温度值
第1种方法运行图示如下:
界面上一共6个组件。从左到右,从上到下分别是:
标签1,la1,默认text:华氏度
按钮1,but1,image为:
标签2,la2,默认textg:摄氏度
文本框1,en1
按钮2,but2,text=” 转换确定 “
文本框2,en2
全部代码:
from tkinter import * def zf(): # 2个标签文本互换 str=la1['text'] la1['text']=la2['text'] la2['text']=str def c2f(): # 根据标签的不同,选择不同的公式来计算结果 a=float(en1.get()) # 获取文本框1的数据 if la1['text']=='华氏度': b= (a-32)/1.8 # 华氏度=(摄氏度-32)/1.8 else: b= a*1.8+32 # 摄氏度=华氏度*1.8+32 en2.delete(0,END) # 先清空文本框2 en2.insert(END,b) # 再插入计算的结果 root=Tk() la1=Label(root,text='华氏度') la1.grid(padx=10,pady=(10,0)) img1=PhotoImage(file='f2.png') but1=Button(root,image=img1,relief='flat',cursor='hand2',command=zf) # 绑定标签文本互换 but1.grid(row=0,column=1,pady=(10,0)) la2=Label(root,text='摄氏度') la2.grid(row=0,column=2,padx=10,pady=(10,0)) en1=Entry(root) en1.grid(row=1,column=0,padx=20,pady=20) but2=Button(root,text=" 转换确定 ",relief='groove',cursor='hand2',command=c2f) # 绑定计算函数 but2.grid(row=1,column=1) en2=Entry(root) en2.grid(row=1,column=2,padx=20,pady=20) root.mainloop()
上面的代码,都是我1 个个字符码出来的,如果你也是新手,建议也自己码字,通过手工输入代码,你会发现很多自己编程出现的问题。如果只是通过复制粘贴是学不到编程的知识,也无法发现自己在编程过程常会出现的问题。
通过上网我查到的转换公式是:
华氏度=(摄氏度-32)/1.8
摄氏度=华氏度*1.8+32
tkinter新手,请手工输入代码后,运行后,再跟我的代码对比一下,应该可以很好地巩固前面学的知识。上面的代码都有注释,如还有不清楚的,可以留言给我。我的网站是:wb98.com
对了,上面的代码没有对输入的数据验证,如果输入为空或者输入了非数值文本,输入就会出错,为了防止这种情况,所以,c2f()函数的第一行代码应该改一下。
def c2f(): # 根据标签的不同,选择不同的公式来计算结果 a=float(en1.get()) # 获取文本框1的数据(浮点数)
改成:
def c2f(): # 根据标签的不同,选择不同的公式来计算结果 try: a=float(en1.get()) # 获取文本框1的数据(浮点数) except: en2.delete(0,END) # 清空文本框 en2.insert(END,'输入数据为空或错误') # 输入为空或错误给予提示 return # 返回
下面讲解用变量的追踪方法来做上面的程序。
采取变量追踪方法,只要在文本框1输入数据,变量的追踪函数就会立即根据公式算出数据,并在文本框2显示。所以,按钮2是多余的,可以取消它。
采取变量追踪的方式的代码如下:
from tkinter import * def zf(): # 2个标签文本互换 str=la1['text'] la1['text']=la2['text'] la2['text']=str def c2f(*args): # 根据标签的不同,选择不同的公式来计算结果 try: a=float(en1.get()) # 获取文本框1的数据(浮点数) except: en2.delete(0,END) # 清空文本框 en2.insert(END,'输入数据为空或有错误') # 输入为空或错误给予提示 return # 返回 if la1['text']=='华氏度': b= (a-32)/1.8 # 华氏度=(摄氏度-32)/1.8 else: b= a*1.8+32 # 摄氏度=华氏度*1.8+32 en2.delete(0,END) # 先清空文本框2 en2.insert(END,b) # 再插入计算的结果 root=Tk() la1=Label(root,text='华氏度') la1.grid(padx=10,pady=(10,0)) img1=PhotoImage(file='f2.png') but1=Button(root,image=img1,relief='flat',cursor='hand2',command=zf) # 绑定标签文本互换 but1.grid(row=0,column=1,pady=(10,0)) la2=Label(root,text='摄氏度') la2.grid(row=0,column=2,padx=10,pady=(10,0)) var=StringVar() # 文本框1的文本变量 en1=Entry(root,textvariable=var) # 文本框1文本变量绑定var en1.grid(row=1,column=0,padx=20,pady=20) var.trace('w',c2f) # 变量追踪,w模式,绑定c2f函数,注意,函数有参数。 en2=Entry(root) en2.grid(row=1,column=2,padx=20,pady=20) root.mainloop()
上面的代码主要改进在:
1. 去除了but2创建代码。
2. c2f()函数加上了参数,为:c2f(*args)
3. 文本框1创建代码改成:
var=StringVar() # 文本框1的文本变量
en1=Entry(root,textvariable=var) # 文本框1文本变量绑定var
运行改成的代码,结果如下:
上面的代码所涉及的知识都是前面几篇文章所讲解的。少量涉及的知识是python基本知识。
多动手输代码,才能学好编程,光看别人的经验之谜是学不好的,这是我的经验,与大家共勉。
下一篇文章继续讲解新的组件,单选按钮 radiobutton 和 复选 按钮 checkbutton
来源:济亨网
本文链接:https://wb98.com/post/307.html