2014-04-08 55 views
1

我發現這個教程的空地/ GTK窗口內顯示matplotlib積:Matplotlib爲格萊德/ GTK控件:移植到新版本

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

我不知道的是哪個版本本教程使用的許多軟件包。如何將此代碼移植到最新版本的GTK和Glade?

林間空地文件可以在這裏找到:

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

+0

是你能解決這個問題,沒有? – fuesika

+0

@pyStarter - 不,但它似乎仍然存在一些錯誤。我在這裏發佈了其中的一個:https://github.com/matplotlib/matplotlib/issues/2976,它看起來像Ubuntu 14用戶需要等待一個新的構建:https://github.com/matplotlib/matplotlib/issues/2916 – tobias47n9e

+0

@pyStarter - 也連接到這個:https://bugs.launchpad.net/freetype/+bug/1310728 – tobias47n9e

回答

0

我有一個簡單的版本工作。隨意發佈改進。我還發布了一個pull請求,所以這可能會被添加到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> 
+0

你確定,你正在使用python3嗎?在你的py文件的頂部,它說:'#!/ usr/bin/env python'。 – fuesika

+0

我在Ubuntu下使用「python3 filename.py」來運行它。所以我認爲在這種情況下,shebang-line就被忽略了。 – tobias47n9e