2016-08-04 6 views
1

システム:Windows 7 のpython:2.7.12 グレイド: ライブラリを使用3.14.2:matplotlibの、私が表示しようとしていますmaplotlibの使用

こんにちは、 networkx matplotlibの図をGTKに埋め込みました。スクロールウインドウの表示は機能しません。しかし、私はツールバーでそれを保存しようとしたとき、私は実際にそれを保存することができます。

コードは以下の通りです:

import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk 
from figure1 import figure 
from matplotlib.figure import Figure 
from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as   FigureCanvas 
from matplotlib.backends.backend_gtk3 import NavigationToolbar2GTK3 as NavigationToolbar 

class main_function(): 

def __init__(self): 
    interface= Gtk.Builder() 
    interface.add_from_file("interface1.glade") 
    interface.connect_signals(self) 
      # relier les signaux aux fonctions   
    # on stocke notre fichier Glade dans des variables 
    self.mainWindow=interface.get_object("mainWindow") 
    self.aboutchronomap=interface.get_object("aboutchronomap") 
    self.fichierdialogue=interface.get_object("fichierdialogue") 
    self.sw=interface.get_object("mainFigure") 
    self.sw2=interface.get_object("MatplotlibToolbar") 
    # on stocke les widgets avec les interfaces 
    canvas = FigureCanvas(figure()) 
    print(type(canvas)) 
    print(type(figure())) 
    self.sw.add_with_viewport(canvas) 
    print("self.sw.add_with_viewport(canvas)")   
    toolbar = NavigationToolbar(canvas, self.mainWindow) 
    self.sw2.add_with_viewport(toolbar) 
    print("toolbar display") 


main_function() 
Gtk.main() 

figure1.pyコード:私が持っているもの

<child> 
        <object class="GtkScrolledWindow" id="mainFigure"> 
        <property name="visible">True</property> 
        <property name="can_focus">True</property> 
        <property name="hscrollbar_policy">always</property> 
        <property name="vscrollbar_policy">always</property> 
        <property name="shadow_type">in</property> 
        <child> 
         <placeholder/> 
        </child> 
        </object> 
        <packing> 
        <property name="expand">True</property> 
        <property name="fill">True</property> 
        <property name="position">1</property> 
        </packing> 
</child> 

:図は、正常に表示されるはずスクロールウィンドウの

from gi.repository import Gtk 
import matplotlib.pyplot as plt 
from matplotlib.figure import Figure 
from numpy import sin, cos, pi, linspace 


def figure(): 
    fig = Figure(figsize=(5,5), dpi=80) 
    ax = fig.add_subplot(111) 

    n = 1000 
    xsin = linspace(-pi, pi, n, endpoint=True) 
    xcos = linspace(-pi, pi, n, endpoint=True) 
    ysin = sin(xsin) 
    ycos = cos(xcos) 

    sinwave = ax.plot(xsin, ysin, color='black', label='sin(x)') 
    coswave = ax.plot(xcos, ycos, color='black', label='cos(x)', linestyle='--') 

    ax.set_xlim(-pi,pi) 
    ax.set_ylim(-1.2,1.2) 

    ax.fill_between(xsin, 0, ysin, (ysin - 1) > -1, color='blue', alpha=.3) 
    ax.fill_between(xsin, 0, ysin, (ysin - 1) < -1, color='red', alpha=.3) 
    ax.fill_between(xcos, 0, ycos, (ycos - 1) > -1, color='blue', alpha=.3) 
    ax.fill_between(xcos, 0, ycos, (ycos - 1) < -1, color='red', alpha=.3) 

    ax.legend(loc='upper left') 

    ax = fig.gca() 
    ax.spines['right'].set_color('none') 
    ax.spines['top'].set_color('none') 
    ax.xaxis.set_ticks_position('bottom') 
    ax.spines['bottom'].set_position(('data',0)) 
    ax.yaxis.set_ticks_position('left') 
    ax.spines['left'].set_position(('data',0)) 
    return fig 

グレイドのXMLコードディスプレイ:

enter image description here

私は、ツールバーの「保存」ボタンを使用している場合は、私が実際に右図があります:GTKで enter image description here

を、私はそれを見ることはできません。 誰でも助けてくれますか?

ありがとうございました! Mia

+0

最後に、私は解決策を見つけるために管理し、あなただけの「)(self.mainWindow.show_all」を追加する必要があり、それが動作します。 –

答えて

0

私は自分で把握することができます。 self.mainWindow.show_all()を追加するだけでよい。

この問題のいくつかの追加のリソースがあります。 GTK GUIでmatplotlibの画像を埋め込むために

、私は以下のコードを使用する:

def on_carto_display_button_press_event(self,widget,event): 
    if self.View.display_Mode != "carto": 
     self.View.display_Mode = "carto" 
     child=self.View.sw.get_child() 
     child1 = self.View.toolbar.get_child() 
     #print(child1) 

     if child != None: 
      self.View.toolbar.remove(child1) 
      self.View.sw.remove(child) 
      self.box.remove(self.View.canvasChrono) 

     self.box=Gtk.Box() 
     self.View.sw.add(self.box) 
     self.box.pack_start(self.View.canvasCarto, True, True, 0) 
     #Add toolbar 
     toolbar = NavigationToolbar(self.View.canvasCarto, self.View.window) 
     self.View.toolbar.add_with_viewport(toolbar) 
     child1 = self.View.toolbar.get_child() 
     #print(child1) 
     self.View.sw.show_all() 
     #self.View.toolbar.show_all() 

GUI GTKでmatplotlibのプロットを埋め込むの別の例は、以下のいずれか:

#!/usr/bin/python3 
 

 
from gi.repository import Gtk 
 

 
from matplotlib.figure import Figure 
 
from numpy import sin, cos, pi, linspace 
 
#Possibly this rendering backend is broken currently 
 
#from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as FigureCanvas 
 
from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as FigureCanvas from matplotlib.backends.backend_gtk3 import NavigationToolbar2GTK3 as NavigationToolbar 
 

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

 
builder = Gtk.Builder() 
 
builder.add_objects_from_file('mpl-ntb-glade.glade', ('window1', '')) 
 
builder.connect_signals(Signals()) 
 

 
myfirstwindow = builder.get_object('window1') 
 
sw = builder.get_object('scrolledwindow1') 
 
sw2 = builder.get_object('scrolledwindow2') 
 

 
fig = Figure(figsize=(5,5), dpi=80) 
 
ax = fig.add_subplot(111) 
 

 
n = 1000 
 
xsin = linspace(-pi, pi, n, endpoint=True) 
 
xcos = linspace(-pi, pi, n, endpoint=True) 
 
ysin = sin(xsin) 
 
ycos = cos(xcos) 
 

 
sinwave = ax.plot(xsin, ysin, color='black', label='sin(x)') 
 
coswave = ax.plot(xcos, ycos, color='black', label='cos(x)', linestyle='--') 
 

 
ax.set_xlim(-pi,pi) 
 
ax.set_ylim(-1.2,1.2) 
 

 
ax.fill_between(xsin, 0, ysin, (ysin - 1) > -1, color='blue', alpha=.3) 
 
ax.fill_between(xsin, 0, ysin, (ysin - 1) < -1, color='red', alpha=.3) 
 
ax.fill_between(xcos, 0, ycos, (ycos - 1) > -1, color='blue', alpha=.3) 
 
ax.fill_between(xcos, 0, ycos, (ycos - 1) < -1, color='red', alpha=.3) 
 

 
ax.legend(loc='upper left') 
 

 
ax = fig.gca() 
 
ax.spines['right'].set_color('none') 
 
ax.spines['top'].set_color('none') 
 
ax.xaxis.set_ticks_position('bottom') 
 
ax.spines['bottom'].set_position(('data',0)) 
 
ax.yaxis.set_ticks_position('left') 
 
ax.spines['left'].set_position(('data',0)) 
 

 
fig.tight_layout() 
 

 
canvas = FigureCanvas(fig) 
 
sw.add_with_viewport(canvas) 
 

 
toolbar = NavigationToolbar(canvas, myfirstwindow) 
 
sw2.add_with_viewport(toolbar) 
 

 
myfirstwindow.show_all() 
 
Gtk.main()

このドキュメントは)=問題を解決するためにあなたを助けるために極めて有用である

http://gtk3-matplotlib-cookbook.readthedocs.io/en/latest/matplotlib-toolbar.html#matplotlib-toolbar-with-glade

関連する問題