2017-09-28 58 views
0

我剛剛開始學習python,我喜歡這門語言,它更容易理解我過去嘗試過的其他人,也就是說我一直在碰撞一堵牆,現在幾天。Python自定義公式計算器

我想寫一個自定義公式python calc。到目前爲止,我有:

from Tkinter import * 
from math import * 
def printAll(): 
    printMoneyIn() 
    printMoneyOut() 

def printMoneyIn(): 
    Label(master, text= "money in = \n" u"\xA3").grid(row=7, column=0) 
def printMoneyOut(): 
    Label(master, text = "money out", sum = (e1 + e2 * e3 + e4)).grid(row=8) 

master = Tk() 
v = IntVar() 
formula1 = e1*e2*e3+e4 
formula2 = e1+e2+e3+e4 

e1 = Entry(master) 
e2 = Entry(master) 
e3 = Entry(master) 
e4 = Entry(master) 

def getFloats(): 
    val1 = float (e1.get()) 
    val2 = float (e2.get()) 
    val3 = float (e3.get()) 
    val4 = float (e4.get()) 

Radiobutton(master, text="without", padx = 10, width = 10, variable=v, value=1, indicatoron=0).grid(row=1, column=0) 
Radiobutton(master, text="with", padx = 10, width = 10, variable=v, value=2, indicatoron=0).grid(row=1, column=1) 
Label(master, text="money in", padx=20, width=10, bg = "light blue").grid(row=3) 
Label(master, text="times by", padx=20, width=10, bg = "light blue").grid(row=4) 
Label(master, text="times by", padx=20, width=10, bg = "red").grid(row=5) 
Label(master, text="money out", padx=20, width=10, bg = "red").grid(row=6) 
Label(master).grid(row=7, column=0) 

# automatically adds the value 5 to money out 
e4.insert(10,"5") 

e1.grid(row=3, column=1) 
e2.grid(row=4, column=1) 
e3.grid(row=5, column=1) 
e4.grid(row=6, column=1) 
Button(master, text='Show', command=printAll, width=20).grid(row=7, column=1, sticky=W, pady=4) 
Label(master).grid(row=7, column=0) 
Label(master).grid(row=8) 
master.mainloop() 

我的目標是:

  • 添加值在輸入框中。
  • 確定選擇哪個單選框來確定公式。
  • 在輸入框中的數字上運行公式。
  • 在底部顯示結果。

無論我嘗試什麼,我似乎都無法得到數字來互相交流。

我正在淘上互聯網,越來越困惑,比我開始。如果任何人都能指出我正確的方向,請讓我繼續學習這門語言。

謝謝你的幫助。

Rob

+1

你得到什麼錯誤?當你計算公式1和公式2 e1時,e2,e3和e4沒有被定義... –

+1

到目前爲止,你已經展示了你已經完成了什麼以及你想要達到什麼,但不是你的實際問題是什麼以及你想要什麼知道。這將需要得到答案。 – mkrieger1

+0

您還沒有在您的問題中提出過問題。你需要幫助什麼_specific_部分問題? –

回答

0

在代碼中有幾件事情會導致它不能正常工作。

即使您的代碼的printMoneyIn()printMoneyOut()部分工作,它會在每次按下顯示按鈕時將標籤堆疊在彼此之上。相反,您應該在init上創建標籤,然後在按show時更新該標籤。請注意,您的兩個標籤都會失敗,因爲它們不是一個連續的字符串。如果你想添加一些字符串,你可以使用.format()。首先進行數學運算,然後將該值附加到文本字段。它應該使閱讀更容易。

將您的輸入字段轉換爲浮點數存在問題。如果輸入字段爲空或包含非數字值,則會出錯。我們可以通過幾種方法解決這個問題,但現在我已經添加了一個for循環,它將在每個字段中將零置入。但是在路上,你應該確保你有錯誤檢查,如使用try/except聲明或validation

在python編程時可以記住的另一件事是避免在導入時使用*。更確切地說,你正在導入的是什麼,或者通過定義你唯一導入的內容來確保你不覆蓋任何其他的導入或構建方法。例如,您可以執行import tkinter as tk。這將允許您使用前綴爲tk.的任何tkinters方法,而不影響名稱空間中的任何其他內容。

看看下面的代碼。它不完美,但它的清理有點和功能。

import tkinter as tk 


master = tk.Tk() 
v = tk.IntVar() 

def printAll(): 
    val1 = float(e1.get()) 
    val2 = float(e2.get()) 
    val3 = float(e3.get()) 
    val4 = float(e4.get()) 
    my_sum = (val1 + val2 * val3 + val4) 
    lbl1.config(text = "money out = {}".format(my_sum)) 

tk.Radiobutton(master, text="without", padx = 10, width = 10, variable=v, value=1, indicatoron=0).grid(row=1, column=0) 
tk.Radiobutton(master, text="with", padx = 10, width = 10, variable=v, value=2, indicatoron=0).grid(row=1, column=1) 
tk.Label(master, text="money in", padx=20, width=10, bg = "light blue").grid(row=3) 
tk.Label(master, text="times by", padx=20, width=10, bg = "light blue").grid(row=4) 
tk.Label(master, text="times by", padx=20, width=10, bg = "red").grid(row=5) 
tk.Label(master, text="money out", padx=20, width=10, bg = "red").grid(row=6) 

# You need to assign your label widget to a variable name so you can update its text later. 
lbl1 = tk.Label(master, text = "money out") 
lbl1.grid(row=10) 

e1 = tk.Entry(master) 
e2 = tk.Entry(master) 
e3 = tk.Entry(master) 
e4 = tk.Entry(master) 
e1.grid(row=3, column=1) 
e2.grid(row=4, column=1) 
e3.grid(row=5, column=1) 
e4.grid(row=6, column=1) 

# automatically adds zeros to all fields. Because you cannot convert blank fields to floats. 
for entry in [e1, e2, e3, e4]: 
    entry.insert(tk.END, "0") 

tk.Button(master, text='Show', command=printAll, width=20).grid(row=7, column=1, sticky=tk.W, pady=4) 

master.mainloop() 
+0

邁克,這是完美的,謝謝,非常感謝,我非常感激,現在我可以看到代碼。我會查看該驗證,但現在感謝您的幫助。 – Rob

+0

@Rob很高興幫助。你可以從閱讀tkinter的一些文檔中獲益。他們有很多關於如何使用每個小部件的信息以及你可以用它們做什麼。 –