私のプログラム (をGTK
使用して開発glade
) は、いくつかのデータを受け取り、データを表す を含む別のウィンドウを表示するオプションがありmatplotlib scatterplot
ます。
私の問題は、ユーザーがグラフを閉じてwindow
再度開いた場合、グラフが表示されないことです。それは単なる空白GTK Window
です。簡単な修正があると確信していますが、私の問題 (またはその問題の統合) に関連する利用可能なリソースはあまりありませGTK
んmatlplotlib
。
簡単に再利用できるようにModule
自分用に作成しました。scatterplot
私はそれを機能させようとしているだけなので、コードは完全に構造化されていません。
##Scatterplot Module:
import gtk
import matplotlib
from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas
from matplotlib.figure import Figure
class ScatterPlot:
def __init__(self):
self.window = gtk.Window()
self.window.connect("destroy", lambda x: self.destroy())
self.window.set_default_size(500,400)
self.is_hidden = False
self.figure = Figure(figsize = (5,4), dpi=100)
self.ax = self.figure
self.ax = self.ax.add_subplot(111)
self.canvas = FigureCanvas(self.figure)
self.window.add(self.canvas)
self.Xs = list()
self.Ys = list()
def set_axis(self, xLimit = (0,384) , yLimit = (0,100)):
self.ax.set_xlim(xLimit)
self.ax.set_ylim(yLimit)
def plot(self, xs, ys):
self.Xs.extend([xs])
self.Ys.extend([ys])
self.ax.plot(xs,ys,'bo')
def update(self):
self.window.add(self.canvas)
def set_title(self, title):
self.ax.set_title(title)
def show(self):
self.window.show_all()
self.is_hidden = False
def hide(self):
self.window.hide()
self.is_hidden = True
def destroy(self):
self.window.destroy()
モジュールを次のように呼び出します。
class GUI:
def __init__(self):
self.scatterplot = scatterplot.ScatterPlot()
#When the user presses the "Graph" button it calls the following function
def graph():
self.scatterplot.plot(someDataX, someDataY)
self.scatterplot.set_axis()
self.scatterplot.set_title("Some Title")
self.scatterplot.show()
(これは、私のコードがどのように見えるかの単なる例です。)
が閉じているときは、代わりにscatterplot
呼び出しています。再開しようとすると、同じ関数を呼び出しますが、上記のようにグラフが表示されません。(最初に開いたときは、完全に表示されます)self.window.destroy
self.window.hide
graph()
GTK Window
私の推測:
.hide()
の代わりに電話する必要があり.destroy()
ますか?scatterplot
を作成するために再度呼び出す必要があるコードがのコンストラクタにありplot
ますか?- または、呼び出される
plot
たびに再インスタンス化する必要がありますか?graph()