python 3.x - Tkinter, त्रुटि अधिकतम पुनरावृत्ति गहराई पार हो गई



python-3.x matplotlib (1)

self.root.after(50, self.update_clock()) बदलें। self.root.after(50, self.update_clock())

के बाद (delay_ms, कॉलबैक = कोई नहीं, * args)

एक अलार्म कॉलबैक रजिस्टर करता है जिसे एक निश्चित समय के बाद कहा जाता है।

मैं matplotlib कि dinamicaly को अद्यतन करता है के साथ एक tkinter आवेदन लिखने में परेशानी हो रही है। मैं एक प्लॉट बनाता हूं और इसे टिंकर विंडो के अंदर उपयोग करता हूं। फिर प्लॉट को प्रत्येक 50ms में tk.after () पद्धति से अपडेट किया जाता है, जो कि अब तक मेरे द्वारा आजमाए गए अन्य अनुप्रयोगों में ठीक काम करता है। लेकिन मेरे आवेदन में सबकुछ कुछ समय के बाद (एक मिनट या तो) तक काम करता प्रतीत होता है, मुझे एक त्रुटि मिलती है:

RecursionError: पायथन ऑब्जेक्ट को कॉल करते समय अधिकतम पुनरावर्तन गहराई पार हो गई

कोड है:

import matplotlib
#matplotlib.use('TkAgg')
from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
# implement the default mpl key bindings
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
import sys
import time

if sys.version_info[0] < 3:
    import Tkinter as Tk
else:
    import tkinter as Tk


import numpy as np
import matplotlib.pyplot as plt
import math

class MainWindow():

    #----------------

    def __init__(self, root):
        self.index=0
        self.root=root
        self.fig, self.ax = plt.subplots()
        self.line, = self.ax.plot(np.random.randn(100))
        #plt.show(block=False)


        # a tk.DrawingArea
        self.canvas = FigureCanvasTkAgg(self.fig, master=root)
        self.canvas.show()
        self.canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

        self.toolbar = NavigationToolbar2TkAgg(self.canvas, root)
        self.toolbar.update()
        self.canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)


        self.canvas.mpl_connect('key_press_event', self.on_key_event)

        self.display = Tk.Label(root, text="") # we need this Label as a variable!
        self.display.pack()

        self.button1 = Tk.Button(master=root, text='Quit', command=self._quit)
        self.button1.pack(side=Tk.BOTTOM)

        global w
        w=2*math.pi


        self.button2 = Tk.Button(master=root, text='Increase frecuency', command=self.button2_event)
        self.button2.pack(side=Tk.BOTTOM)

        #A simple clock
        global miliseconds
        global t
        t=time.time()
        self.update_clock()
        print('going to the next stop')
        self.root.mainloop()


    def on_key_event(event):
        print('you pressed %s' % event.key)
        key_press_handler(event, self.canvas, toolbar)




    def _quit(self):
        self.root.quit()     # stops mainloop
        self.root.destroy()  # this is necessary on Windows to prevent
                        # Fatal Python Error: PyEval_RestoreThread: NULL tstate

    def button2_event(self):

        global t
        global w
        w+=2*3.1416

    def update_clock(self):

        global t
        mili=str(math.floor(1000*(t-time.time())))+' ms'
        t=time.time()


        now = time.strftime("%H:%M:%S"+'-'+mili)
        self.display.configure(text=now)

        N=100
        y=np.sin(4*math.pi*(np.array(range(N))/N)+t*w)
        x=range(N)
        self.line.set_ydata(y)
        self.line.set_xdata(x)

        self.ax.relim()
        self.ax.autoscale()
        #☺fig.canvas.update()
        #fig.canvas.flush_events()

        self.canvas.show()
        self.canvas.flush_events()

        self.root.after(50, self.update_clock()) #<------ERROR HERE!------


root = Tk.Tk()
root.wm_title("Embedding in TK")
MainWindow(root)




tkinter