我正在用 python 开发一个应用程序,它使用matplotlib、numpy和gtk绘制信息。我正在使用 matplotlib 绘制 numpy 数据,用户可以更改小部件中的一些参数来修改绘图
出于设计原因,我想将绘图(和数据)与控制 GUI 分开,然后我将数据绘制在一个窗口中,并将控件放在单独的窗口中。在gtk中,我发现看起来可以通过多个窗口发送数据的WindowGroup小部件,但是我找不到方法!
以下代码显示了问题的简化:我在窗口中绘制了一个正弦曲线,用户可以在窗口中使用垂直调整条(事件)修改变量fm 。当我运行脚本时,我可以看到事件(移动垂直调整条)触发了函数,但没有实现绘图。
怎么能改变剧情?或使用WindowGroup小部件在两个窗口之间发送消息?
#!/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()