【问题标题】:Matplotlib as Glade/GTK widget: porting to new versionMatplotlib 作为 Glade/GTK 小部件:移植到新版本
【发布时间】:2014-04-08 16:31:12
【问题描述】:

我发现本教程用于在林间空地/GTK 窗口内显示 matplotlib-plot:

http://matplotlib.org/examples/user_interfaces/mpl_with_glade.html

我不确定本教程使用的众多软件包中的哪个版本。如何将此代码移植到最新版本的 GTK 和 Glade?​​p>

Glade 文件可以在这里找到:

https://github.com/matplotlib/matplotlib/blob/master/examples/user_interfaces/mpl_with_glade.glade

【问题讨论】:

标签: python-3.x matplotlib gtk3 glade


【解决方案1】:

我有一个简单的版本可以工作。随时发布改进。我还发布了一个拉取请求,以便将其添加到 matplotlib 文档中。

Python 3 文件:

    #!/usr/bin/env python3

    from gi.repository import Gtk, Gio

    from matplotlib.figure import Figure
    from matplotlib.axes import Subplot
    from numpy import arange, sin, pi
    from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as FigureCanvas

    import sys

    class Window1Signals:
        def on_window1_destroy(self, widget):
            Gtk.main_quit()

    def main():
        builder = Gtk.Builder()
        builder.add_objects_from_file("mpl_with_glade_316.glade", ("window1", "") )
        builder.connect_signals(Window1Signals())
        window = builder.get_object("window1")
        sw = builder.get_object("scrolledwindow1")

        #Start of Matplotlib specific code
        ##########################################################################
        figure = Figure(figsize=(8,6), dpi=71)
        axis = figure.add_subplot(111)
        t = arange(0.0, 3.0, 0.01)
        s = sin(2*pi*t)
        axis.plot(t,s)

        axis.set_xlabel('time [s]')
        axis.set_ylabel('voltage [V]')

        canvas = FigureCanvas(figure)  # a Gtk.DrawingArea
        canvas.set_size_request(800,600)
        sw.add_with_viewport(canvas)    
        ##########################################################################
        #End of Matplotlib specific code    

        window.show_all()
        Gtk.main()

    if __name__ == "__main__":
        main()

空地代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Generated with glade 3.16.1 -->
    <interface>
      <requires lib="gtk+" version="3.10"/>
      <object class="GtkApplicationWindow" id="window1">
        <property name="can_focus">False</property>
        <property name="title" translatable="yes">Matplotlib</property>
        <property name="default_width">800</property>
        <property name="default_height">600</property>
        <signal name="destroy" handler="on_window1_destroy" swapped="no"/>
        <child>
          <object class="GtkScrolledWindow" id="scrolledwindow1">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="border_width">10</property>
            <property name="shadow_type">in</property>
            <child>
              <placeholder/>
            </child>
          </object>
        </child>
      </object>
    </interface>

【讨论】:

  • 你确定,你使用的是python3吗?在你的 py 文件的顶部它说:'#!/usr/bin/env python'。
  • 我在 Ubuntu 下使用“python3 filename.py”运行它。所以我认为在这种情况下,shebang-line 只是被忽略了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
相关资源
最近更新 更多