【问题标题】:Function not working as intended, python, TKinter功能未按预期工作,python,TKinter
【发布时间】:2017-04-09 20:05:27
【问题描述】:

我无法从另一个函数中的函数调用变量。

我有两个功能:

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

知道为什么这不起作用吗?提前谢谢你。

【问题讨论】:

  • 第一个函数中的递归永远不会停止,你的if条件中总是有一个递归调用......
  • 好的,我想我明白了,我该如何阻止呢?但它不是一个循环,为什么它会继续自己运行?
  • 因为它是一个总是调用自身的递归函数,例如 try def f(): f() 您永远不会到达 else 块,因为每次调用该函数时,它都会检查 if 条件,然后再次调用自己。 .. 无休止地(好吧,直到 Python 出错)。实际上,您总是最终会使用递归调用...所以我不知道您期望发生什么或您的函数打算做什么。
  • 我想要它做的就是接受用户输入检查它是int还是float,然后将其存储在veldCalc函数中使用
  • 你的其余代码也很奇怪。例如,在您的第二个函数中,您希望veld * int(veldCalc) 做什么? veldCalc 是函数本身!

标签: python python-3.x function variables tkinter


【解决方案1】:

您似乎对如何在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()

然后,要检查用户输入是浮点数还是整数,您可以使用this link 中描述的技术。

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 2020-04-28
    • 2021-08-27
    • 1970-01-01
    • 2012-10-07
    • 2014-08-13
    • 1970-01-01
    相关资源
    最近更新 更多