Я пытался получить некоторые eventlisteners работать, и это, кажется, не делать ничего, когда в классе - даже не распечатывать данные:Почему мои матплотблиб-события не срабатывают, когда они используются в классе?
from pylab import *
from cmath import *
class integrator:
def __init__(self, func, fig):
self.debug = False
self.pressed = False
self.firstPt = None
self.lastPt = None
self.isum = 0
cid = fig.canvas.mpl_connect('button_press_event', self.onclick)
fig.canvas.mpl_connect('motion_notify_event', self.onmove)
fig.canvas.mpl_connect('button_release_event', self.onUp)
#def plotpt(self, z, mark=','):
#ax.plot(z.real, z.imag, 'k'+mark)#black point.
#try:
#result = eval(func)
#if debug:
#print 'result',result
#ax.plot(result.real, result.imag, 'r'+mark)#red result point.
#except ZeroDivisionError:
#print "Undefined/infinite (/0) at", z
def onclick(self, event):
self.lastPt = event.xdata + 1j*event.ydata
self.firstPt = self.lastPt
self.isum = 0
print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(
event.button, event.x, event.y, event.xdata, event.ydata)
def onmove(self, event):
if event.xdata is not None and event.ydata is not None and lastPt is not None :
print event.xdata, event.ydata
pt = event.xdata + 1j*event.ydata
diff = abs(pt - lastPt)
z = lastPt
nth = eval(func)
z = pt
nxt = eval(func)
part = (nth+nxt)/2 * diff
print nth,nxt,diff
isum += part
def onUp(self, event):
print 'UP button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(
event.button, event.x, event.y, event.xdata, event.ydata)
print "From",self.firstPt,"to",self.lastPt,"along f(z) =",func,':'
print self.isum
print "Note: phase(z) is argument, z.conjugate() is conj, z.real, z.imag are re/im parts."
func = raw_input('f(z)=')
fig = plt.figure("Complex function f(z)="+func)
ax = fig.add_subplot(1,1,1)
ax.set_xbound(-3,3)
ax.set_ybound(-3,3)
#ax.plot(np.random.rand(10))
fig.set_label('F(z)='+func)
plt.draw()
integrator(func, fig)
plt.draw()
show()#looks like nothing after this line runs.
Это было, по крайней мере, частично работает, прежде чем я сделал это в класс: Здесь было бы по крайней мере, распечатать что-то, но не найти сложный кривой интеграл от любого кривых вы щелкните и перетащите на экране (всегда говорил, это было 0):
from pylab import *
from cmath import *
debug = False
pressed = False
firstPt = None
lastPt = None
isum = 0
def plotpt(z, mark=','):
ax.plot(z.real, z.imag, 'k'+mark)#black point.
try:
result = eval(func)
if debug:
print 'result',result
ax.plot(result.real, result.imag, 'r'+mark)#red result point.
except ZeroDivisionError:
print "Undefined/infinite (/0) at", z
def onclick(event):
lastPt = event.xdata + 1j*event.ydata
firstPt = lastPt
isum = 0
print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(
event.button, event.x, event.y, event.xdata, event.ydata)
def onmove(event):
if event.xdata is not None and event.ydata is not None and lastPt is not None :
print event.xdata, event.ydata
pt = event.xdata + 1j*event.ydata
diff = abs(pt - lastPt)
z = lastPt
nth = eval(func)
z = pt
nxt = eval(func)
part = (nth+nxt)/2 * diff
print nth,nxt,diff
isum += part
def onUp(event):
print 'UP button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(
event.button, event.x, event.y, event.xdata, event.ydata)
print "From",firstPt,"to",lastPt,"along f(z) =",func,':'
print isum
print "Note: phase(z) is argument, z.conjugate() is conj, z.real, z.imag are re/im parts."
func = raw_input('f(z)=')
fig = plt.figure("Complex function f(z)="+func)
ax = fig.add_subplot(1,1,1)
ax.set_xbound(-3,3)
ax.set_ybound(-3,3)
#ax.plot(np.random.rand(10))
fig.set_label('F(z)='+func)
plt.draw()
cid = fig.canvas.mpl_connect('button_press_event', onclick)
fig.canvas.mpl_connect('motion_notify_event', onmove)
fig.canvas.mpl_connect('button_release_event', onUp)
plt.draw()
show()#looks like nothing after this line runs.
Показать последнюю строку - в обоих этих примерах. – NoBugs
Достаточно честный. Можете ли вы уменьшить это до минимального примера? – tacaswell
также, что означает «частично работает»? – tacaswell