使用gtk.WindowGroup在使用python matplotlib的windows之间进行通信

使用gtk.WindowGroup在使用python matplotlib的windows之间进行通信,python,numpy,matplotlib,Python,Numpy,Matplotlib,我正在用python开发一个应用程序,它使用matplotlib、numpy和gtk绘制信息。我正在使用matplotlib绘制numpy数据,用户可以在小部件中更改一些参数以修改绘图 出于设计原因,我希望将绘图和数据从控件GUI中分离出来,然后在一个窗口中绘制数据,并将控件放在一个单独的窗口中。在gtk中,我发现WindowGroup小部件看起来可以在多个窗口上发送数据,但是我找不到如何发送数据 下面的代码显示了问题的简化:我在窗口中绘制正弦曲线,用户可以使用垂直调整条事件修改窗口中的变量fm

我正在用python开发一个应用程序,它使用matplotlib、numpy和gtk绘制信息。我正在使用matplotlib绘制numpy数据,用户可以在小部件中更改一些参数以修改绘图

出于设计原因,我希望将绘图和数据从控件GUI中分离出来,然后在一个窗口中绘制数据,并将控件放在一个单独的窗口中。在gtk中,我发现WindowGroup小部件看起来可以在多个窗口上发送数据,但是我找不到如何发送数据

下面的代码显示了问题的简化:我在窗口中绘制正弦曲线,用户可以使用垂直调整条事件修改窗口中的变量fm。当我运行脚本时,我可以看到事件移动垂直调整条会触发函数,但不会实现绘图

如何改变情节?或者使用WindowGroup小部件在两个窗口之间发送消息


我找到了一个解决方案,首先我删除了所有gtk.WindowGroup的内容:

窗口组=gtk.WindowGroup window\u group.add\u windowwin1 window\u group.add\u windowwin2 我在画布中的函数update_hscale中重新绘制,而不是在绘图l中:

#!/usr/bin/python

import gtk
import numpy
import matplotlib.pyplot as plt

from matplotlib.backends.backend_gtkagg \
    import FigureCanvasGTKAgg as FigureCanvas

def update_hscale(event):
    global t    
    fm = hscale.get_value()
    y_new = numpy.sin(2*fm*t)
    l.set_ydata(y_new)
    plt.draw()
    print "doing fm=", fm


# define the window group
window_group=gtk.WindowGroup()

# matplotlib plot in window 1
fm = 5.0
t = numpy.arange(200)
y = numpy.sin(2*fm*t)
fig = plt.figure(1)  
ax = fig.add_subplot(111)
l, = ax.plot(t, y)

win1 = gtk.Window()
win1.connect("destroy", gtk.main_quit)
win1.set_default_size(800,300)
vbox1 = gtk.VBox()
canvas = FigureCanvas(fig)
vbox1.pack_start(canvas, fill=True)
win1.add(vbox1)

# controls in window 2
win2 = gtk.Window()   
vbox2 = gtk.VBox()    
adj = gtk.Adjustment(0.0, -5, 5, 1.0, 1.0, 1.0)
hscale = gtk.HScale(adj)
hscale.set_size_request(200, 30)
vbox2.pack_start(hscale)
hscale.connect("value-changed", update_hscale)
win2.add(vbox2)

# adding windows to window_group
window_group.add_window(win1)   
window_group.add_window(win2)   

win1.set_default_size(400,300)
win1.show_all()
win2.show_all()
gtk.main()
def update_hscale(event):
    global t    
    fm = hscale.get_value()
    y_new = numpy.sin(2*fm*t)
    l.set_ydata(y_new)
    canvas.draw()
    print "doing fm=", fm