当前位置:首页 » tkinter » 正文

2种方法做华氏度和摄氏度的转换(tkinter)

这篇文章讲讲用2种方法来做一个华氏度和摄氏度的转换。这个程序并不难,用我们学过的丁点tkinter知识也可以做出来,我用2种方法来做,主要是帮大家来温习和巩固一下前面学习的知识。

第1种方法是不用变量的方式来做,第2种方法是用变量的追踪方法trace()来做。

不用变量的来做温度转换程序

这种方法不用变量追踪方法,就只能通过一个“转换确定”按钮来转换温度值

第1种方法运行图示如下:

1.PNG界面上一共6个组件。从左到右,从上到下分别是:

 标签1,la1,默认text:华氏度

 按钮1,but1,image为:f2.PNG

 标签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

运行改成的代码,结果如下:

2.PNG

上面的代码所涉及的知识都是前面几篇文章所讲解的。少量涉及的知识是python基本知识。

多动手输代码,才能学好编程,光看别人的经验之谜是学不好的,这是我的经验,与大家共勉。


下一篇文章继续讲解新的组件,单选按钮 radiobutton 和 复选 按钮 checkbutton


来源:济亨网

本文链接:http://wb98.com/post/307.html

    << 上一篇 下一篇 >>

    湘公网安备 43011102000514号 - 湘ICP备08100508号