python温度转换_一步一步教会你,详解用Python实现一个简易的温度换算GUI小工具...

今天,我们来使用Python完成一个小工具的制作。很简单,就是对于摄氏温度和华氏温度的相互换算。但是,我们的目的是复习一下之前学过的Python中tkinter的小内容。

ac6eddc451da81cb32e1244d71b3c91008243101.jpeg?token=79e5d072bf6e57af25f7e87d8a2286f7&s=4CF205C546113BD44600249E0300E012复习下前面的知识

先来看下今天要完成的内容

界面效果

7e3e6709c93d70cfc0fe16c0da09c806b8a12bd6.jpeg?token=a0007359f61af7f75daf2c4ef009df3f&s=08207532170A454B4CE500D10000D0B2最终效果展示

Pmw模块

除了tkinter模块外,我们今天还用了一个叫Pmw的模块,它里面有很多功能丰富的控件,比如,常用的EntryField,就是类似我们今天Label+Entry控件,但是它的功能比简答二者组合的功能要丰富的多,EntryField控件可以对于输入进行限定,这样就不需要我们编写额外的代码了。

bba1cd11728b4710938293aeea1bdafbfd032379.jpeg?token=e027f62862bc0f37e2f352dd7856371d&s=8F6AF2056CCC255B50F50D9A0300A0C0省时省力

当然,我们今天不用这个控件了(它封装的太简单了,就几个参数)。我们使用它提供的另外两个控件,Balloon和MessageBar控件,来感受下它们的强大之处。Balloon,顾名思义,就是热气球,对于电脑的话大家第一印象是不是一个类似提示框的东西。

faedab64034f78f0ae8fcf2d5de41353b1191c46.jpeg?token=053e9ec29313102140b94281cc6ffc57&s=348242B68C435CCC503531D2030050B0balloon

MessageBar这个控件也好理解,就是信息提示条,这两个东西就是上面图中我用红线框住的内容。

1e30e924b899a901e6b159bd3e40137d0008f594.jpeg?token=265cdf38a8958fd703bc0a23745e7b8a&s=87A0F1A14CD708C05C9CE993030010C3有了信息提示用户获得感会更强

对于EntryField知识感兴趣的小伙伴可以参见我的另外几篇博文

使用Python制作一个GUI词云自动生成工具,让你秒变数据分析大师

详解Python文件对话框filedialog和颜色选择colorchooser的使用

详解GUI词云自动生成工具中词云属性设置界面的实现(连载六)

Python自动生成词云工具(GUI)之数据清洗功能实现(连载五)

详解词云自动生成工具的数据清洗界面制作过程(连载四)

这是个连载的内容,主要制作了一个词云自动生成工具,亲测可用,感兴趣的小伙伴可以自己敲代码试试看,一个不错的工具,可以扩展哦!

这几篇连载内容里有很多关于Pmw模块中的控件……

tkinter的一些技巧

对于GUI界面的制作,我们知道Python有很多库提供了类似的功能和方法,比如wxPython、Qt、Kivy等等,而最为经典的要数我们的tkinter库了,为什么说它经典,因为它集成在了Python开发环境中,我们不需要额外进行安装,而其它第三方库都是需要安装的。

其实说白了,tkinter库的学习,主要是三点:

8718367adab44aedaa9ec50d97c99e07a38bfb66.jpeg?token=fb6a3cfb2414c14c9a80013e4a038573&s=3A8A72234CF443AF6CB4708E0100A0E1tkinter不外乎这几个点

控件、事件、布局

对于控件属性其实都是大同小异的,使用多了,自然而然就会了。最主要的还是要掌握好常用的事件处理机制和控件的布局方式。

控件的美观布局使得程序更能面向用户、易操作;而事件处理机制其实是程序的核心,它使得程序可用性更强(试想一大堆漂亮的按钮如果不能点击,那么这些按钮就还是没有用处的)

tkinter中控件的布局其实很简单,单个控件尽量将其放入到Frame、TopLevel这样的容器控件中,这样对于控件与控件之间的留白就更好处理,通过设置容器控件的relief属性,还可以给控件组添加一些边框,使得程序更加美观。

4610b912c8fcc3ce77d22875bb90cf8ed53f2045.jpeg?token=416d2daa34f7949ac391c2ad9ff62aac&s=EEF6CC4F9872AFD41D40C93A0300A053想要美观,布局很重要

对于事件,无非就是鼠标按下了,键盘松开了类似这样的操作。记住几个关键操作也就可以了。但是,这个里面比较重要的就是类、方法、函数在一个控件中是如何绑定的,同一个控件如果同时绑定几个方法的话,首先会调用哪个方法呢?(后续我们会讨论)

0df3d7ca7bcb0a46bec0070a4eb6ef226a60af7a.jpeg?token=827c2d143590ccc68f155f3665666f44&s=9770768554428D4F0A03C0330300104B对于键盘鼠标的响应事件

布局,无非就是grid、pack、place,掌握这些就基本可以编写一个美观的GUI程序了

废话不多说,我们直接看下今天的代码

代码实现

# coding:utf-8

import Pmw

from tkinter import *

def is_number(s):

try:

float(s)

return True

except ValueError:

pass

try:

import unicodedata

unicodedata.numeric(s)

return True

except (TypeError, ValueError):

pass

return False

def btnCalc():

if is_number(swdVar.get()) and is_number(hwdVar.get()):

print('传入一个数值型即可,两个都是数值没法计算了!')

swdVar.set('')

hwdVar.set('')

elif is_number(swdVar.get()) and not is_number(hwdVar.get()):

# 摄氏温度转换为华氏温度

h = 9 / 5.0 * float(swdVar.get()) + 32

hwdVar.set('{}'.format(h))

elif not is_number(swdVar.get()) and is_number(hwdVar.get()):

# 华氏温度转化为摄氏温度

s = 5 / 9.0 * (float(hwdVar.get()) - 32)

swdVar.set('{}'.format(s))

else:

print("检查填入的数值")

root = Tk()

root.title('温度计算器')

root.geometry('400x250+100+100')

# 添加热气球

balloon = Pmw.Balloon(root)

# 摄氏温度变量

swdVar = StringVar()

f1 = Frame(root, relief='groove', bd=2)

lb1 = Label(f1, text="摄氏温度")

lb1.pack(side=LEFT, padx=5, pady=5)

swd = Entry(f1, textvariable=swdVar)

swdVar.set('输入一个数值')

swd.pack(side=RIGHT, fill=BOTH, expand=YES, padx=5, pady=5)

f1.pack(side=TOP, fill=BOTH, expand=YES, padx=10, pady=10)

balloon.bind(swd, '摄氏温度',

'输入摄氏温度,单击计算按钮后将转化为华氏温度')

# 华氏温度变量

hwdVar = StringVar()

f2 = Frame(root, relief='groove', bd=2)

lb2 = Label(f2, text="华氏温度")

lb2.pack(side=LEFT, padx=5, pady=5)

hwd = Entry(f2, textvariable=hwdVar)

hwd.pack(side=RIGHT, fill=BOTH, expand=YES, padx=5, pady=5)

hwdVar.set('输入一个数值')

f2.pack(side=TOP, fill=BOTH, expand=YES, padx=10, pady=10)

balloon.bind(hwd, "华氏温度",

"输入华氏温度,单击计算按钮后转化为摄氏温度")

# 下面是按钮

f3 = Frame(root)

bcal = Button(f3, text='计算', relief='ridge', bd=2, command=btnCalc)

bcal.pack(side=LEFT, fill=BOTH, expand=YES, padx=10, pady=5)

balloon.bind(bcal, "温度转换",

"上面文本框中输入任意一个单击按钮完成计算")

bext = Button(f3, text='退出', relief='ridge', bd=2, command=root.destroy)

bext.pack(side=RIGHT, fill=BOTH, expand=YES, padx=10, pady=5)

balloon.bind(bext, "退出程序","单击退出程序")

f3.pack(side=TOP, fill=BOTH, expand=YES, padx=5, pady=5)

# 信息条,展示帮助信息

messageBar = Pmw.MessageBar(root,

entry_width=40,

entry_relief='groove',

labelpos='w',

label_text='提示信息:')

# 布局信息条

messageBar.pack(fill=X, expand=YES, side=BOTTOM, padx=10, pady=5)

# 绑定信息条

balloon.configure(statuscommand=messageBar.helpmessage)

root.mainloop()

58ee3d6d55fbb2fbbd8a943a699f39a24723dc55.jpeg?token=88ba4930dcceeedc03d3479708b18aef&s=5680D70389E0C94D4412EC740300403B暂告一段落

好了,今天的内容就到这里了,对于Python GUI感兴趣的小伙伴们可以关注我,后续会推出更多精彩内容。本人近期也在学习一些Python编程的其它内容,会逐步跟大家分享看到的知识点和实例,有意提高Python编程能力的小伙伴一定要关注我,大家一起学习进步……

转载请注明出处,百家号:Python高手养成。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值