一直想写个简单的GUI练习一下,于是参考(参考1,参考2)写了一个很朴素的长度单位转换器。朴素,所以对整个过程理解起来比较容易。本次练习使用的是tkinter模块。
预期效果:
image.png
Python3代码:
# UnitsExchange1.0
from tkinter import * # 这样导入,类似 tkinter.Tk() 这种形式就可以简化为 Tk()
#### 定义换算函数 ####
def calculate(*args):
try:
# 异常处理
# 通过此处,使用value将meters和cm链接起来,使得meters变量随着cm变量变化而变化
value = float(cm.get()) # 获取输入
meters.set((value/100.0)) # 进行换算
except ValueError:
pass
#### 创建主窗口 ####
root = Tk()
root.title('Units Exchange')
####
# 在使用界面编程的时候,有些时候是需要跟踪变量的值的变化,以保证值的变更随时可以显示在界面上。
# 此处通过StringVar实现,他的函数有set(),get()等。
cm = StringVar() # 定义一个cm全局变量
meters = StringVar()
cm_entry = Entry(root,textvariable=cm) # 创建输入框
cm_entry.grid(column=2,row=1) # 放置在2列,1行
# 将meters的结果呈现(由于链接到了cm,其值在调用calculate函数后会随着cm变化)
Label(root,textvariable=meters).grid(column=2,row=2)
# 创建一个“换算”按钮
Button(root,text='换算',command=calculate).grid(column=3,row=3)
# 创建静态文本部件
Label(root, text="cm").grid(column=3, row=1)
Label(root, text="is equivalent to").grid(column=1, row=2)
Label(root, text="meters").grid(column=3, row=2)
# 如果用户按下回车键,和点击换算按钮一样,启动换算
root.bind('<Return>', calculate)
root.mainloop() # 进入消息循环(必须部件)
运行测试(为了使代码简洁,界面很朴素):
image.png
在上面基础上更进一步,不仅仅是厘米转换为米,想要有更多选择,于是将UnitsExchange1.0改写为UnitsExchange1.1版本。
1.1版本结果:
image.png
image.png
界面仍然很朴素,但可以有选择地换算常用长度单位,体现了基本过程。换算单位那一栏改为下拉列表应该效果更好,界面的布局可以使用 tkinter 的 ttk 进行优化,颜色的设置和窗口的尺寸等等。
参考3:tkinter模块常用参数(python3)
最后,使用 pyInstaller 将脚本打包成exe可执行文件就Ok了。
网友评论