一键搞定吨与千克转换的 Python 程序

使用Python的Tkinter库来创建一个吨(t)与千克(kg)转换的可视化界面程序,界面中包含清晰的提示信息、输入框以及转换按钮等,方便用户直观地进行操作并查看转换结果

在这里插入图片描述

完整代码:

import tkinter as tk

def convert():
    """
    执行转换操作的函数
    """
    try:
        choice = option_var.get()
        if choice == 1:
            value = float(entry.get())
            result = value * 1000
            result_label.config(text=f"{value}吨等于{result}千克")
        elif choice == 2:
            value = float(entry.get())
            result = value / 1000
            result_label.config(text=f"{value}千克等于{result}吨")
        else:
            result_label.config(text="请选择正确的转换方向")
    except ValueError:
        result_label.config(text="请输入有效的数值")


root = tk.Tk()
root.title("吨与千克转换程序")

# 选择转换方向的提示标签
direction_label = tk.Label(root, text="请选择转换方向:")
direction_label.pack()

# 选择转换方向的单选按钮变量
option_var = tk.IntVar()
option_var.set(1)

# 吨转换为千克的单选按钮
radio_button_1 = tk.Radiobutton(root, text="吨转换为千克", variable=option_var, value=1)
radio_button_1.pack()

# 千克转换为吨的单选按钮
radio_button_2 = tk.Radiobutton(root, text="千克转换为吨", variable=option_var, value=2)
radio_button_2.pack()

# 输入数值的提示标签
input_label = tk.Label(root, text="请在下方输入对应数值:")
input_label.pack()

# 输入框
entry = tk.Entry(root)
entry.pack()

# 转换按钮
convert_button = tk.Button(root, text="转换", command=convert)
convert_button.pack()

# 结果显示标签
result_label = tk.Label(root, text="")
result_label.pack()

root.mainloop()

以下是对上述代码各部分的详细解释:

1. 导入模块

import tkinter as tk

导入Python的Tkinter库,并使用别名tk,方便后续代码中调用库中的函数和类来创建图形用户界面组件

2. convert函数

def convert():
    """
    执行转换操作的函数
    """
    try:
        choice = option_var.get()
        if choice == 1:
            value = float(entry.get())
            result = value * 1000
            result_label.config(text=f"{value}吨等于{result}千克")
        elif choice == 2:
            value = float(entry.get())
            result = value / 1000
            result_label.config(text=f"{value}千克等于{result}吨")
        else:
            result_label.config(text="请选择正确的转换方向")
    except ValueError:
        result_label.config(text="请输入有效的数值")
  • 这个函数是整个程序的核心逻辑部分,用于根据用户选择的转换方向和输入的数值进行相应的吨与千克的转换,并将结果显示在界面上,同时处理用户输入异常的情况。
  • try: 语句块用于捕获可能出现的异常,在其内部:
    • choice = option_var.get():通过option_var(这是一个IntVar类型的变量,用于关联单选按钮的选择结果)获取用户选择的转换方向,其值为1表示选择“吨转换为千克”,值为2表示选择“千克转换为吨”。
    • 接下来通过if-elif-else语句根据不同的选择进行相应操作:
      • 如果choice == 1,即用户选择“吨转换为千克”:
        • value = float(entry.get()):从界面上的输入框(entry对象)获取用户输入的数值,并尝试将其转换为浮点数类型,赋值给value变量
        • result = value * 1000:按照吨与千克的换算关系(1吨等于1000千克),将获取到的数值乘以1000,得到转换后的千克数值,存储在result变量中。
        • result_label.config(text=f"{value}吨等于{result}千克"):通过result_label(界面上用于显示结果的标签组件)的config方法,将其显示的文本内容设置为转换后的结果信息,使用格式化字符串将valueresult的值嵌入到文本中进行展示
      • 如果choice == 2,也就是用户选择“千克转换为吨”:
        • 同样先获取用户输入的数值并转换为浮点数赋值给value变量。
        • 然后按照换算关系,将value除以1000得到转换后的吨的数值,存储在result变量中。
        • 最后通过result_labelconfig方法将显示文本设置为相应的转换结果信息,即f"{value}千克等于{result}吨"
      • 如果choice既不是1也不是2,说明用户没有正确选择转换方向,则通过result_label.config(text="请选择正确的转换方向")在结果显示标签上提示用户选择正确的方向。
    • except ValueError: 用于捕获float(entry.get())这一步可能出现的异常情况,当用户在输入框中输入的内容无法转换为浮点数(比如输入了字母等非数字字符)时,就会触发这个异常,此时通过result_label.config(text="请输入有效的数值")在结果显示标签上显示提示信息,告知用户输入的不是有效的数值,需要重新输入

3. 创建主窗口及相关组件

root = tk.Tk()
root.title("吨与千克转换程序")
  • root = tk.Tk():创建了一个顶层的Tkinter窗口对象,这个窗口就是整个图形用户界面应用程序的主窗口,后续所有的界面组件都将添加到这个主窗口中
  • root.title("吨与千克转换程序"):调用root对象(主窗口)的title方法,给主窗口设置一个标题,使得窗口在显示时,标题栏上会显示“吨与千克转换程序”这个明确的标题,方便用户识别程序功能

4. 创建选择转换方向的提示标签

direction_label = tk.Label(root, text="请选择转换方向:")
direction_label.pack()
  • direction_label = tk.Label(root, text="请选择转换方向:"):创建了一个Label类型的界面组件,用于在界面上显示文本提示信息。这里的Label组件的第一个参数root表示它所属的父容器是主窗口root,第二个参数text指定了要显示的文本内容,即提示用户选择转换方向,让用户清楚下一步操作
  • direction_label.pack():调用pack方法对创建好的direction_label标签进行布局管理,pack方法是Tkinter中一种简单常用的布局方式,它会按照默认的顺序和规则将组件放置在父容器中,在这里就是将选择转换方向的提示标签放置在主窗口内合适的位置上(通常是从上到下依次排列)

5. 创建选择转换方向的单选按钮

option_var = tk.IntVar()
option_var.set(1)

radio_button_1 = tk.Radiobutton(root, text="吨转换为千克", variable=option_var, value=1)
radio_button_1.pack()

radio_button_2 = tk.Radiobutton(root, text="千克转换为吨", variable=option_var, value=2)
radio_button_2.pack()
  • option_var = tk.IntVar():创建了一个IntVar类型的变量,这个变量在Tkinter中常用于关联单选按钮(Radiobutton)的选择状态,它可以存储整型数值,并且会随着单选按钮的选择变化而自动更新其值
  • option_var.set(1):将option_var变量的初始值设置为1,这意味着默认情况下,界面上“吨转换为千克”这个单选按钮会处于被选中的状态
  • radio_button_1 = tk.Radiobutton(root, text="吨转换为千克", variable=option_var, value=1):创建了第一个单选按钮组件,其第一个参数root表示所属的父容器是主窗口;第二个参数text设置按钮上显示的文本为“吨转换为千克”,用于直观地告知用户该按钮对应的转换方向;第三个参数variable指定了关联的变量为option_var,也就是这个单选按钮的选择状态会影响option_var的值;第四个参数value设置了当该单选按钮被选中时,option_var的值会被设置为1
  • radio_button_1.pack():对第一个单选按钮进行布局管理,使其显示在主窗口中合适的位置,按照pack布局方式,会在之前的提示标签下方排列
  • 同理,创建并布局第二个单选按钮radio_button_2,其文本显示为“千克转换为吨”,关联的value值为2,当它被选中时,option_var的值会变为2,以此来让用户选择不同的转换方向

6. 创建输入数值的提示标签

input_label = tk.Label(root, text="请在下方输入对应数值:")
input_label.pack()
  • 这部分代码与前面创建选择转换方向提示标签的思路类似,创建了一个新的Label组件,用于提示用户在下方输入相应的数值,通过pack方法将其布局在主窗口中合适的位置,一般会在单选按钮的下方,引导用户进行下一步操作

7. 创建输入框

entry = tk.Entry(root)
entry.pack()
  • entry = tk.Entry(root):创建了一个Entry类型的界面组件,这就是供用户输入数值的文本输入框。其参数root表示它隶属于主窗口,作为主窗口的一个子组件存在,用户可以在这个输入框中输入要进行转换的吨或者千克的数值
  • entry.pack():使用pack方法对输入框进行布局,使其显示在主窗口中合适的位置,按照pack布局的默认顺序,会在输入数值提示标签的下方,方便用户看到提示后进行输入操作

8. 创建转换按钮

convert_button = tk.Button(root, text="转换", command=convert)
convert_button.pack()
  • convert_button = tk.Button(root, text="转换", command=convert):创建了一个Button类型的界面组件,也就是按钮。第一个参数root指定它所属的父容器为主窗口;第二个参数text设置按钮上显示的文本为“转换”,让用户明确点击该按钮可以执行转换操作;第三个参数command则绑定了前面定义的convert函数,意味着当用户点击这个按钮时,就会触发执行convert函数,从而实现根据用户输入和选择进行吨与千克的转换以及结果显示等操作
  • convert_button.pack():对按钮进行布局管理,使其显示在主窗口中合适的位置,通常会在输入框的下方,按照pack布局方式依次排列,方便用户操作

9. 创建结果显示标签

result_label = tk.Label(root, text="")
result_label.pack()
  • result_label = tk.Label(root, text=""):创建了一个用于显示转换结果的Label组件,它同样隶属于主窗口root,初始时设置其显示的文本内容为空字符串,后续会在convert函数中根据实际的转换情况来更新这个标签显示的文本内容,以展示正确的转换结果或者错误提示信息给用户
  • result_label.pack():使用pack方法将结果显示标签放置在主窗口中的合适位置,一般会在按钮的下方,用于展示吨与千克转换之后的最终结果或者相应的提示内容

10. 启动主窗口的事件循环

root.mainloop()

mainloop方法是Tkinter中非常关键的一个部分,它启动了主窗口的事件循环。在这个循环中,程序会持续监听用户的各种操作(比如鼠标点击、键盘输入等),并根据用户的操作来相应地更新界面或者执行绑定的函数等,使整个图形用户界面应用程序能够持续响应并与用户交互,直到用户关闭窗口,事件循环才会结束,程序随之退出

运行上述代码后,会弹出一个图形用户界面窗口,用户可以按照界面提示选择转换方向、输入相应数值,然后点击“转换”按钮,就能在界面上看到转换结果或者相应的错误提示信息了,方便快捷地实现吨与千克之间的转换操作

你可以根据喜好进一步对界面进行美化,比如设置字体、颜色、大小等样式属性,让界面更加美观和易用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值