代码之家  ›  专栏  ›  技术社区  ›  Sulabh Tiwari

如何在Tkinter中使用缩放小部件更新matplotlib

  •  0
  • Sulabh Tiwari  · 技术社区  · 9 年前
    import numpy as np
    from Tkinter import *
    from ttk import *
    import matplotlib
    matplotlib.use('TkAgg')
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
    from matplotlib.backend_bases import key_press_handler
    from matplotlib.figure import Figure
    def on_key_event(event):
       print('you pressed %s'%event.key)
       key_press_handler(event, canvas, toolbar)
    def mOpen():
       var = IntVar()
       slider_1 = Scale(mGui,orient=HORIZONTAL,length = 100,from_=0,to=9,variable=var)
       slider_1.place(x = 765,y=390)
       t = np.arange(100000).reshape(100,100,10)
       f = Figure(figsize=(5,4),dpi=100)
       a = f.add_subplot(111)
       a.imshow(t[:,:,var.get()])
       print var.get()
       canvas_3 = FigureCanvasTkAgg(f,master = mGui)
       canvas_3.show()
       canvas_3.get_tk_widget().place(x=5,y=5)
       toolbar_3 = NavigationToolbar2TkAgg( canvas_3, mGui )
       toolbar_3.update()
       toolbar_3.place(x=10,y=15)
       canvas_3._tkcanvas.place(x=7,y=7)
       canvas_3.mpl_connect('key_press_event', on_key_event)
    mGui = Tk()                     
    mOpen()
    mGui.geometry('900x900+300+10') 
    mGui.title('Plot')
    mGui.mainloop()
    

    我试图用 a.imshow(t[:,:,var.get()]) 命令但是,在更新比例时,第三坐标的值( var.get() )没有改变。

    如何使用缩放小部件输出更新绘图?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Diziet Asahi    9 年前

    您需要使用 command= 参数 Scale 每次修改小部件时调用函数。在此函数中,您可以更新绘图。

    代码有点混乱,因为您必须访问numpy数组以及该函数中的轴和画布,但这是有效的:

    import numpy as np
    from Tkinter import *
    from ttk import *
    import matplotlib
    matplotlib.use('TkAgg')
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
    from matplotlib.backend_bases import key_press_handler
    from matplotlib.figure import Figure
    
    
    
    
    def on_key_event(event):
       print('you pressed %s'%event.key)
       key_press_handler(event, canvas, toolbar)
    
    def mOpen():
       global t
       global a
       global canvas_3
    
       var = IntVar()
       slider_1 = Scale(mGui,orient=HORIZONTAL,length = 100,from_=0,to=9, variable=var, command=updateScale)
       slider_1.place(x = 765,y=390)
       t = np.random.random_sample(100000).reshape(100,100,10)
       f = Figure(figsize=(5,4),dpi=100)
       a = f.add_subplot(111)
       a.imshow(t[:,:,var.get()])
       print var.get()
       canvas_3 = FigureCanvasTkAgg(f,master = mGui)
       canvas_3.show()
       canvas_3.get_tk_widget().place(x=5,y=5)
       toolbar_3 = NavigationToolbar2TkAgg( canvas_3, mGui )
       toolbar_3.update()
       toolbar_3.place(x=10,y=15)
       canvas_3._tkcanvas.place(x=7,y=7)
       canvas_3.mpl_connect('key_press_event', on_key_event)
    
    def updateScale(var):
       print "scale is now %s" % (var)
       a.imshow(t[:,:,int(float(var))])
       canvas_3.show()
    
    mGui = Tk()                     
    mOpen()
    mGui.geometry('900x900+300+10') 
    mGui.title('Plot')
    mGui.mainloop()