我正在编写一个程序,使用滑块在GUI中调整参数来绘制Lennard-Jones potential。
这是我的代码:
from Tkinter import *
import pylab as p
import math
def show_values():
V=epsilon.get*(math.exp(-r/sigma.get)-(2/sigma.get)**6)
p.plot(r,V)
p.show()
r = p.arange(0.1, 0.2, 0.01)
master = Tk()
epsilon = Scale(master, from_=-10,length=300, to=30, resolution=0.1, width=100)
epsilon.pack()
sigma = Scale(master, from_=-50, to=25, length=300,resolution=0.1, orient=HORIZONTAL)
sigma.pack()
Button(master, text='Show', command=show_values).pack()
mainloop()
但是我从IDE(冠层)收到此错误消息
%run C:/Users/PC/Desktop/lenard.py
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\PC\AppData\Local\Enthought\Canopy32\App\appdata\canopy-1.4.1.1975.win-x86\lib\lib-tk\Tkinter.py", line 1470, in __call__
return self.func(*args)
File "C:\Users\PC\Desktop\lenard.py", line 7, in show_values
V=epsilon.get*(math.exp(-r/sigma.get)-(2/sigma.get)**6)
TypeError: unsupported operand type(s) for /: 'float' and 'instancemethod'
所以我的问题有三个部分:
这条消息是什么意思?
如何使这个程序有效?
“错误消息”是否正确?我们如何称呼此类消息?
答案 0 :(得分:2)
关于你的每个问题:
错误消息表示您尝试通过实例方法(函数)对象划分浮点对象。
因为get
是Scale
类的实例方法,所以必须这样调用它:
V=epsilon.get()*(math.exp(-r/sigma.get())-(2/sigma.get())**6)
# ^^ ^^ ^^
否则,您将使用get
函数对象本身执行计算。
是的,你可以称之为。术语"追溯"通常是指整个错误输出:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\PC\AppData\Local\Enthought\Canopy32\App\appdata\canopy-1.4.1.1975.win-x86\lib\lib-tk\Tkinter.py", line 1470, in __call__
return self.func(*args)
File "C:\Users\PC\Desktop\lenard.py", line 7, in show_values
V=epsilon.get*(math.exp(-r/sigma.get)-(2/sigma.get)**6)
TypeError: unsupported operand type(s) for /: 'float' and 'instancemethod'
while"错误消息"通常只指最后一行:
TypeError: unsupported operand type(s) for /: 'float' and 'instancemethod'