首页 > 解决方案 > GTKAgg 画布和 GTKScrolledWindow 上的滚动事件

问题描述

我正在尝试使用在我的 matplotlib 图中连接滚动事件

canvas.mpl_connect('scroll_event', on_scroll)

这基本上是可行的,但是如果将绘图放置在 GTKScrolledWindow 中,则绘图会对滚动事件做出反应,并且 ScrolledWindow 也会滚动。如何阻止 ScrolledWindow 上的事件?有没有办法抓住它?

import gtk
from matplotlib.figure import Figure
import numpy as np
from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as 
FigureCanvas

def main():

    win = gtk.Window()
    win.connect("destroy", lambda x: gtk.main_quit())
    win.set_default_size(400, 400)
    win.set_title("Embedding in GTK")
    scrolled_window = gtk.ScrolledWindow()
    scrolled_window.set_policy(gtk.POLICY_ALWAYS, gtk.POLICY_ALWAYS)
    win.add(scrolled_window)
    vbox = gtk.VBox()
    vbox.set_size_request(600,600)
    scrolled_window.add_with_viewport(vbox)

    fig = Figure(figsize=(5, 4), dpi=100)
    ax = fig.add_subplot(111)
    t = np.arange(0.0, 3.0, 0.01)
    s = np.sin(2*np.pi*t)

    ax.plot(t, s)

    canvas = FigureCanvas(fig)  # a gtk.DrawingArea
    vbox.pack_start(canvas)

    def on_scroll(event):
        print('you scrolled')

    canvas.mpl_connect('scroll_event', on_scroll)

    win.show_all()
    gtk.main()

if __name__ == '__main__':
    main()

标签: pythonmatplotlibgtkpygtkgtk2

解决方案


推荐阅读