2017-04-09 70 views
0

我無法從另一個函數內的函數調用變量。功能不按預期工作,蟒蛇,TKinter

我有兩個功能:

def refineRate(event): 

    if refineRate(event) == int(): 
     refine = int(refineRate(event)) 
     return refine 

    else: 
     refine = float(refineRate(event)) 
     return refine 

和:

def veldCalc(event): 

    minValue = open("mineral_value.csv", "r") 
    veld = minValue.readlines()[0] 
    minValue.close() 
    veld = veld[0:3] 
    veld = int(veld) 
    veld = veld/100 * refineRate(event) 
    refinedVeld = veld * int(veldCalc) 
    print (refinedVeld) 

我也有兩個條目,其中計算器的用戶可以輸入一些數字。

repro = Label(root, text="Reprocessing %") 
repro_entry = Entry(root) 
repro.grid(row=0, column=0) 
repro_entry.grid(row=0, column=1) 


veld = Label(root, text="Veldspar: ") 
veld_entry = Entry(root) 
veld.grid(row=1, column=0) 
veld_entry.grid(row=1, column=1) 

repro_entry.bind("<KeyPress>", refineRate) 
veld_entry.bind("<KeyPress>", veldCalc) 

我需要的是爲用戶的輸入有refineRate,哪些應該再打通函數傳遞和存儲供以後使用。在當他們進入他們擁有量,veldCalc功能,那麼應該拉動用戶從以前的功能改進率和做數學題,但即時得到以下錯誤

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Users\Ganjena\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__ 
    return self.func(*args) 
    File "C:/Users/Ganjena/Desktop/Course/Projects/helloworld/ORE FUNCTIONS/Ore Calculator.py", line 5, in refineRate 
    if refineRate(event) == int(): 
    File "C:/Users/Ganjena/Desktop/Course/Projects/helloworld/ORE FUNCTIONS/Ore Calculator.py", line 5, in refineRate 
    if refineRate(event) == int(): 
    File "C:/Users/Ganjena/Desktop/Course/Projects/helloworld/ORE FUNCTIONS/Ore Calculator.py", line 5, in refineRate 
    if refineRate(event) == int(): 
    [Previous line repeated 990 more times] 
RecursionError: maximum recursion depth exceede 

任何想法,這是爲什麼不工作?先謝謝你。

+2

在你的第一個功能將永遠不會停止遞歸,你總是有你'if'條件的遞歸調用... –

+0

確定我想我明白了,我怎麼能停止?但它不是一個循環,爲什麼它會繼續運行? – Gromit

+0

因爲它是一個總是自己調用的遞歸函數,就像嘗試'def f():f()'你永遠不會到達你的else塊,因爲每次調用函數時,它都會檢查if條件並再次調用自己。無盡的(好吧,直到Python出錯)。事實上,你總是最終使用遞歸調用...所以我不知道你期望發生什麼或者你的函數是怎麼做的。 –

回答

0

你似乎有一個如何得到tk.Entry部件內的用戶輸入值的誤解。正確的方法是在小部件上使用.get()方法。

下面是一個小例子,讓你開始:

# (Use Tkinter/tkinter depending on Python version) 
import Tkinter as tk 

class App(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 
     self.repro = tk.Label(self, text="Reprocessing %") 
     self.repro_entry = tk.Entry(self) 
     self.repro.grid(row=0, column=0) 
     self.repro_entry.grid(row=0, column=1) 
     self.repro_entry.bind("<Return>", self.refineRate) 
     self.mainloop() 

    def refineRate(self, evt): 
     # Get the user input and print it in the terminal 
     userRepro = self.repro_entry.get() 
     print(userRepro) 

# Launch the GUI 
app = App() 

然後,檢查用戶輸入是否是float或int,你可以使用this link描述的技術。