Tkinter二级窗口温度转换功能故障求助:使用global仍失效
温度转换功能修复方案
原代码核心问题
- 控件赋值错误:
entry = Entry(NewWindow).pack()会将pack()的返回值None赋值给变量,后续无法获取输入内容 - 缺少单位选择控件:未实现单选按钮来指定转换方向
- 转换函数未定义:按钮绑定的
convert_temperature函数不存在 - 缩进逻辑混乱:
openNewWindow函数内部分代码缩进层级错误 - 转换公式精度不足:华氏转摄氏用
0.55会丢失精度,应使用(F-32)*5/9 - 全局变量滥用:无需全局声明二级窗口,控件引用应在函数内正确保存
修正后的完整代码
from tkinter import Tk, Toplevel, Label, Entry, Button, Radiobutton, IntVar def openNewWindow(): # 创建二级窗口 new_window = Toplevel(master_window) new_window.title("Dave's weather app") new_window.geometry('350x350') new_window.configure(bg='dark blue') # 标题标签 Label(new_window, text="Temperature Conversion", fg='gold', bg='dark blue', font=('bold', 12)).pack(pady=10) # 温度输入区域 Label(new_window, text="Enter Temperature:", bg='dark blue', fg='white').pack(pady=5) temp_entry = Entry(new_window) temp_entry.pack(pady=5) # 单位选择单选按钮 unit_var = IntVar(value=0) # 0=摄氏转华氏,1=华氏转摄氏 Radiobutton(new_window, text="Celsius → Fahrenheit", variable=unit_var, value=0, bg='dark blue', fg='white').pack(pady=2) Radiobutton(new_window, text="Fahrenheit → Celsius", variable=unit_var, value=1, bg='dark blue', fg='white').pack(pady=2) # 结果标签 result_label = Label(new_window, text="", bg='dark blue', fg='gold', font=('bold', 10)) result_label.pack(pady=10) # 转换逻辑函数 def convert_temperature(): try: temp = float(temp_entry.get()) if unit_var.get() == 0: # 摄氏转华氏 result = temp * 1.8 + 32 result_label.config(text=f"{temp}°C = {result:.2f}°F") else: # 华氏转摄氏 result = (temp - 32) * 5 / 9 result_label.config(text=f"{temp}°F = {result:.2f}°C") except ValueError: result_label.config(text="请输入有效数字") # 转换按钮 convert_btn = Button(new_window, text="Convert", command=convert_temperature) convert_btn.pack(pady=5) # 主窗口初始化 master_window = Tk() master_window.title("Welcome Screen") master_window.configure(bg='dark blue') master_window.geometry('200x200') Label(master_window, text="Welcome!", bg='dark blue', fg='white').pack(pady=10) Button(master_window, text="Click to open Dave's Weather app", command=openNewWindow).pack(expand=True) Button(master_window, text="Exit", command=master_window.quit).pack(expand=True) master_window.mainloop()
关键修改说明
- 控件引用修正:将
pack()与控件创建分离,确保能正常访问输入框和结果标签 - 添加单选按钮:用
IntVar绑定选择状态,明确转换方向 - 内嵌转换函数:在二级窗口函数内定义转换逻辑,直接访问窗口内控件,无需全局变量
- 错误处理:捕获输入非数字的异常,给出友好提示
- UI优化:统一窗口配色,调整控件间距提升美观度
- 公式精度修正:使用精确分数计算,避免转换误差
内容的提问来源于stack exchange,提问作者Reesecup
相关产品推荐
相关产品推荐

