使用Tkinter将温度转换为摄氏度、华氏度和开尔文的温度转换器

2024-05-14 03:28:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个程序,将温度转换为摄氏度、华氏度和开尔文,方法是从用户处获取有效输入,分别使用if、elif和else提供转换后的温度。 我刚开始学习tkinter,所以对它不太了解,请帮助我更正源代码

import tkinter as tk
root = tk.Tk()
root.geometry("250x170") 
root.title('Temperature Converter')
frame=tk.Frame(root)
frame.pack()
l=tk.Label(root, text = "HELLO!!! Welcome to Temperature Converter") 
l.config(font =("Courier", 14)) 
l.pack()
t="Enter 1 To Convert Temperature Into Celsius.""\n"+"Enter 2 To Convert Temperature Into Fahrenheit.""\n"+"Enter 3 To Convert Temperature Into Kelvin."
l1=tk.Label(root, text = t,justify="left")
l1.config(font =("Courier", 14)) 
l1.pack(side="top",anchor="nw")  
def printtext():
    global e
    string = e.get() 
    print(string)  
e = tk.Entry(root,font =("Courier", 14))
e.pack(ipady=3,ipadx=3,anchor="center")
e.focus_set()

b = tk.Button(root,text='okay',font =("Courier", 13),command=printtext,anchor="center")
b.pack(side='top')
def Celsius():
    Fah=float(raw_input('Enter the temp in Fahrenheit')
    Celsius=(get(Fah)-32.0)*5.0//9.0)
    clabel=tk.Label(root,Celsius,text="Successfully Converted into Celsius")
    clabel.pack()
def Fahrenheit():
    Cel=float(raw_input('Enter the temp in Celsius')
    Fahrenheit=(get(Cel)*9.0//5.0+32)
    Flabel=tk.Label(root,Cel,text="Successfully Converted into Fahrenheit")
    Flabel.pack()
def Kelvin():
    Ces=float(raw_input('Enter the temp in Celsius')
    Kelvin=(get(Ces)+273)
    Klabel=tk.Label(root,Cel,text="Successfully Converted into Kelvin")
    Klabel.pack()  
def on_button():
    if e.get() == 1:
        Celsius()
    elif e.get() == 2:
        Fahrenheit()
    elif e.get() == 3:
        Kelvin()
    else: 
        tkinter.messagebox.showerror(title=None, message= "Invalid Choice")
root.mainloop()

Tags: textgetdefrootlabelpacktkenter
1条回答
网友
1楼 · 发布于 2024-05-14 03:28:40

我已经写了一些代码,但重要的是你要尽量理解它。我用单选按钮找出了主温度和转换温度。我用过radiobutton,你也可以用Combobox。无论如何,我使用了一个函数,然后选择将所有其他值转换为它,然后再转换为所需的值。看一看:

from tkinter import *

root = Tk()

lhs = IntVar(value=-1)
rhs = IntVar(value=-1)
opt = ['Celcius','Farenheit','Kelvin']

def convert(temp,from_='K',to='C'):
    if from_ == to: return None
    
    from_k_formulas = {'C':lambda t: t-273.15,'F': lambda t: (t-273.15)*(9/5)+32,'K': lambda t:t}
    to_k_formulas   = {'C':lambda t: t+273.15,'F': lambda t: (t-32)*(5/9)+273.15,'K': lambda t:t}

    return from_k_formulas[to](to_k_formulas[from_](temp))

def process():
    from_ = opt[lhs.get()].upper()[0]
    to    = opt[rhs.get()].upper()[0]
    temp  = int(e.get())

    out   = convert(temp,from_,to)
    if out is not None:
        print(out)
    else:
        print('Choose distinct units')

Label(root,text='From').grid(row=0,column=0)
Label(root,text='To').grid(row=0,column=1)

for idx,txt in enumerate(opt): # To add first 3 radiobuttons
    Radiobutton(root,text=txt,variable=lhs,value=idx).grid(row=idx+1,column=0,padx=10,pady=10)

for idx,txt in enumerate(opt): # To add second 3 radiobuttons
    Radiobutton(root,text=txt,variable=rhs,value=idx).grid(row=idx+1,column=1,padx=10)

e = Entry(root)
e.grid(row=4,column=0,columnspan=2)

Button(root,text='Convert',command=process).grid(row=5,column=0,pady=10,columnspan=2)

root.mainloop()

此处lhs用于查找左侧温度,而rhs用于查找右侧温度。它会返回所选选项的编号,所以稍后我会用返回的编号为列表编制索引

相关问题 更多 >