我正在使用tkinter和scipy制作一个程序,它集成了一个函数,比方说关于x。这是我的代码:
def newtest1():
intwindow = Tk()
Label(intwindow, text = 'enter here', font = ('Symbol')).grid(row=0)
Label(intwindow, text = 'enter upper bound', font = ('Symbol')).grid(row=1)
Label(intwindow, text = 'enter lower bound', font = ('Symbol')).grid(row=2)
get1 = IntVar()
Entry(intwindow, textvariable = get1).grid(row=0, column=1)
getupper = IntVar()
Entry(intwindow, textvariable = getupper).grid(row=1, column=1)
getlower = IntVar()
Entry(intwindow, textvariable = getlower).grid(row=2, column=1)
bty = Button(intwindow, text='click', command = lambda: newfunction()).grid(row=3)
def newfunction():
x69 = get1.get()
x_upper = getupper.get()
x_lower = getlower.get()
testz = int(x69)
upperz= int(x_upper)
lowerz = int(x_lower)
x9 = lambda x: x69
res = integrate.quad(x9, x_lower,x_upper)
randomwindow = Tk()
label = Label(randomwindow, text = 'you got {} '.format(round(res[0])))
label.grid(row=1)
# Label(randomwindow, text = 'you got %s ' % res).grid(row=1)
randomwindow.mainloop()
mainloop()
newtest1()
如果您查看函数newfunction()的内部,就会发现以下代码
x9 = lambda x: x69
res = integrate.quad(x9, x_lower,x_upper)
我希望在弹出框中,我可以输入类似于2*x的内容,这样它就会集成。然而,之前我在测试输入框中的数字是否有效时使用了get1=IntVar()。我试着删除这一点,因为我目前正试图实现,但这会导致一些逻辑错误。为什么我不能在弹出框中输入我自己的x函数,以便python能够集成它
编辑
@furas这是我现在使用的代码
import numpy
from numpy import *
import scipy.integrate as integrate
import scipy.special as special
from tkinter import *
def newtest1():
intwindow = Tk()
Label(intwindow, text = 'enter here', font = ('Symbol')).grid(row=0)
Label(intwindow, text = 'enter upper bound', font = ('Symbol')).grid(row=1)
Label(intwindow, text = 'enter lower bound', font = ('Symbol')).grid(row=2)
get1 = StringVar()
Entry(intwindow, textvariable = get1).grid(row=0, column=1)
getupper = IntVar()
Entry(intwindow, textvariable = getupper).grid(row=1, column=1)
getlower = IntVar()
Entry(intwindow, textvariable = getlower).grid(row=2, column=1)
bty = Button(intwindow, text='click', command = lambda: newfunction()).grid(row=3)
def newfunction():
x69 = get1.get()
x_upper = getupper.get()
x_lower = getlower.get()
#testz = int(x69)
upperz= int(x_upper)
lowerz = int(x_lower)
x9 = eval(f"lambda x: {x69}")
res = integrate.quad(x9, x_lower,x_upper)
randomwindow = Tk()
label = Label(randomwindow, text = 'you got {} '.format(round(res[0])))
label.grid(row=1)
# Label(randomwindow, text = 'you got %s ' % res).grid(row=1)
randomwindow.mainloop()
mainloop()
newtest1()
这就是我得到的错误
Exception in Tkinter callback
Traceback (most recent call last):
File "/opt/anaconda3/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "/Users/isa/Desktop/Diff Eqns/diffeqn.py", line 45, in <lambda>
bty = Button(intwindow, text='click', command = lambda: newfunction()).grid(row=3)
File "/Users/isa/Desktop/Diff Eqns/diffeqn.py", line 58, in newfunction
x9 = eval(lambda x: {x69})
TypeError: eval() arg 1 must be a string, bytes or code object
如果要将字符串
"2*x"
放在Entry
中,则必须使用StringVar()
而不是IntVar()
来获取它您需要使用
eval()
将这个字符串转换为可以计算值的函数或者使用f-string或
.format()
将此字符串放入其他字符串中在下面的代码中,我使用了名称,它的意思是
在代码中,我还添加了其他更改-主要与PEP 8 Style Guide for Python Code相关
相关问题 更多 >
编程相关推荐