TypeError:/:' float'不支持的操作数类型。简单的绘图程序

时间:2014-11-20 20:57:22

标签: python matplotlib tkinter typeerror

我正在编写一个程序,使用滑块在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'

所以我的问题有三个部分:

  1. 这条消息是什么意思?

  2. 如何使这个程序有效?

  3. “错误消息”是否正确?我们如何称呼此类消息?

1 个答案:

答案 0 :(得分:2)

关于你的每个问题:

  1. 错误消息表示您尝试通过实例方法(函数)对象划分浮点对象。

  2. 因为getScale类的实例方法,所以必须这样调用它:

    V=epsilon.get()*(math.exp(-r/sigma.get())-(2/sigma.get())**6)
    #            ^^                       ^^              ^^
    

    否则,您将使用get函数对象本身执行计算。

  3. 是的,你可以称之为。术语"追溯"通常是指整个错误输出:

    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'