2013-12-20 23 views
0

即時嘗試使用Tkinter構建一個簡單的GUI,並且該功能應該是將華氏轉換爲攝氏。我真的試圖找出什麼是錯的,但我一直在第31行「無法將字符串轉換爲浮點數」的錯誤。使用gui製作F>攝氏轉換器(tkinter)

File "test.py", line 31, in count 
    fahrenheit = float(inputEntry.get()) # Hämtar input angivet av användaren. 
ValueError: could not convert string to float: 

任何想法?

這是到目前爲止我的代碼:

#- coding: UTF-8 -*- 

import Tkinter 
import tkMessageBox 

main_window = Tkinter.Tk() 
top_frame = Tkinter.Frame(main_window) #i parantes, skriver var framen ska vara 
bottom_frame = Tkinter.Frame(main_window) #i parantes, dvs bottom_frame ska va inne i main_window 
inputLabel = Tkinter.Label(main_window, text='Skriv antal grader =>', font=('helvetica', 14)) 
inputEntry = Tkinter.Entry(main_window, width = 5, bg='white', font=('helvetica', 14)) 
infoLabel = Tkinter.Label(main_window, height = 5, width=40, text='Välkommen till Temperaturomvandlaren!\n' \ 
                  'Nedan kan du omvandla \nFahrenheit till Celsius.', font=('helvetica', 14), bg='#00CC33', fg='white') 

def main(): 
    setupWindow() 
    count() 
    Tkinter.mainloop() 

def setupWindow(): 
    main_window.title('Temperaturkonverteraren') 
    main_window.geometry('380x300+500+250') 
    infoLabel = Tkinter.Label(top_frame, text="Här berättas värdet") 
    Tkinter.Button(main_window, width = 8, text = "Konvertera", font=('helvetica', 10), bg = "grey",command = count).grid(row=3, column=6, pady=12) 
    top_frame.pack() 
    bottom_frame.pack() 
    infoLabel.pack() 
    inputEntry.pack() 


def count(): 
    fahrenheit = float(inputEntry.get()) # Hämtar input angivet av användaren. 
    celsius = (fahrenheit - 32) * 5/9 
    if celsius > 0: # Metod för hantering av färg och värden. 
     infoLabel.configure(bg='#CC0000', text='Det blir %.2f grader Celsius.' % (celsius,)) 
    elif celsius < 0: 
     infoLabel.configure(bg='#3366CC', text='Det blir %.2f grader Celsius.' % (celsius,)) 
    else: 
     infoLabel.configure(bg='#00CC33', text='Det blir %.2f grader Celsius.' % (celsius,)) 


if __name__ == '__main__': 
    main() 
+0

想必31行是'攝氏=(華氏--32)...'?如果沒有,那麼你真的應該指出第31行,因爲我們不擅長計數。 –

+0

複製給我的編輯;該行是'fahrenheit = float(...'是否真的在將'float'轉換爲'str',或者'str'轉換爲'float'?經過測試......它不能將字符串轉換爲float [ 。編輯以包含正確的錯誤 –

+0

@Dolcens你的意思是'不能將字符串轉換爲浮點數? – Ray

回答

2

問題是你並未完全進入一個值調用fahrenheit = float(inputEntry.get())。在main中初始化了GUI,但在調用count之後,當然入口門檻沒有任何價值!您應該在用戶實際輸入inputEntry之後更改您的代碼並調用計數,並可能在嘗試將其轉換爲浮點型之前驗證用戶的值。

你可以做這樣的事情:

val = inputEntry.get() 
if not val: 
    val = 0.0 
fahrenheit = float(val) 

這是一個非常基本的檢查,因爲用戶可以輸入類似'10F',並不能轉換爲浮動。

+0

或者使用'try/except'模塊,但是這隻能解決部分問題,當我嘗試時,GUI根本不會顯示出來 –

+0

是的,這是更好的方法。它似乎是代碼中的其他問題。 –