【发布时间】:2012-10-16 22:30:55
【问题描述】:
我正在使用 GUI 为我的第一个主要项目制作温度转换器,即 Tkinter 模块。我在初始化 GUI 时没有任何问题。这很好用(据我所知)。我需要一些帮助来制作 IF 语句来调用与转换相关的每个函数。我遇到的问题是我不确定如何显示来自两个不同列表的两个项目之间的等价性。这是我的代码(我知道我遗漏了一些东西。显然是 if 语句。)
from tkinter import *
gui = Tk()
gui.title(string='Temperature Converter')
#create the GUI
fromUnit = StringVar()
#variable which holds the value of which unit is active in "units1"
toUnit = StringVar()
#variable which holds the value of which unit is active in "units2"
initialTemp = StringVar()
#the initial temperature entered in "enterTemp" entry
initialTemp.set('0')
#set the initial temperature to 0
convertedTemp = StringVar()
#used to display the converted temperature through "displayTemp"
convertedTemp.set('0')
#set the converted temperature to 0
units1 = ('Celsius', 'Fahrenheit', 'Kelvin') #the units used in the OptionMenu
units2 = ('Celsius', 'Fahrenheit', 'Kelvin')
fromUnit.set(units1[0]) #set the active element to the item in index[0] of units1
toUnit.set(units2[0]) #set the active element to the item in index[0] of units2
# celsius-celcius conversion
def celsius_to_celsius():
currentTemp = float(initialTemp.get())
convertedTemp.set(currentTemp)
# celsius-kelvin conversion
def celsius_to_kelvin():
currentTemp = float(initialTemp.get())
currentTemp = (currentTemp + 273.15)
convertedTemp.set(currentTemp)
# celsius-fahrenheit conversion
def celsius_to_fahrenheit():
currentTemp = float(initialTemp.get())
currentTemp = (currentTemp * (9/5))+32
convertedTemp.set(currentTemp)
#fahrenheit-fahrenheit conversion
def fahrenheit_to_fahrenheit():
currentTemp = float(initialTemp.get())
convertedTemp.set(currentTemp)
#fahrenheit-celsius conversion
def fahrenheit_to_celsius():
currentTemp = float(initialTemp.get())
currentTemp = ((currentTemp - 32)*(5/9))
convertedTemp.set(currentTemp)
#fahrenheit-kelvin conversion
def fahrenheit_to_kelvin():
currentTemp = float(initialTemp.get())
currentTemp = ((currentTemp - 32)*(5/9)+273.15)
convertedTemp.set(currentTemp)
#kelvin-kelvin conversion
def kelvin_to_kelvin():
currentTemp = float(initialTemp.get())
convertedTemp.set(currentTemp)
#kelvin-celsius conversion
def kelvin_to_celsius():
currentTemp = float(initialTemp.get())
currentTemp = (currentTemp - 273.15)
convertedTemp.set(currentTemp)
#kelvin-fahrenheit conversion
def kelvin_to_fahrenheit():
currentTemp = float(initialTemp.get())
currentTemp = (((currentTemp - 273.15)*(9/5))+32)
convertedTemp.set(currentTemp)
#main function
#contains the if statements which select which conversion to use
def convert_Temp():
currentTemp = float(initialTemp.get())
if (fromUnit, toUnit) == ('Celsius','Celsius'):
celsius_to_celsius()
gui.geometry('+100+100')
#set up the geometry
enterTemp = Entry(gui,textvariable=initialTemp,justify=RIGHT)
enterTemp.grid(row=0,column=0)
#Entry which receives the temperature to convert
convertFromUnit = OptionMenu(gui,fromUnit,*units1)
convertFromUnit.grid(row=0,column=1)
#Option Menu which selects which unit to convert from
displayTemp = Label(gui,textvariable=convertedTemp)
displayTemp.grid(row=1,column=0)
#Label which displays the temperature
#Takes text variable "convertTemp"
convertToUnit = OptionMenu(gui,toUnit,*units2)
convertToUnit.grid(row=1,column=1)
#Option Menu which selects which unit to convert to
convertButton = Button(gui,text='Convert',command=convert_Temp)
convertButton.grid(row=2,column=1)
#Button that starts the conversion
#Calls the main function "convert_Temp"
gui.mainloop()
#End of the main loop
感谢您的观看以及您提供的任何帮助和批评。没有知识是浪费的! 干杯
【问题讨论】:
-
DRY。如果你说的东西不止一次,你就说太多次了。另外,这属于codereview.stackexchange.com
-
我会做这样的事情:codepad.org/xQ7HQ3ft(非常快速和肮脏,可以使用一些改进)
-
@NullUserException 我之前尝试过。然而,我刚开始编程,我还没有达到类和对象的水平。照原样,如果您运行代码,它不会更改标签。但是如果我删除 if 语句并做一些简单的事情,比如调用函数,我可以得到改变。但是,当我添加 if 语句时,我遇到了麻烦。我做了一些 quazi 调试,如果 IF 语句不正确,则会创建错误消息。
-
执行IF语句时立即抛出错误信息。
-
您可能会向我们展示您尝试过的(并引发错误)[而不是/除了]有效的方法...
标签: python function if-statement tkinter