我的程序(使用glade
開發的GTK
)接收一些數據並可以選擇顯示包含表示數據的matplotlib scatterplot
的單獨窗口。重新打開GTK和matplotlib窗口 - GTK窗口爲空
我的問題是,如果用戶關閉圖形window
並重新打開它,則不會顯示圖形。這只是一個空白的GTK Window
。我確定有一個簡單的修復方法,但沒有太多可用的資源與我的問題相關(或針對此問題集成了GTK
和matlplotlib
)。
我爲我的scatterplot
創建了一個Module
,因此我可以輕鬆地重複使用它。我只是試圖讓它工作,所以代碼的結構並不完美。
##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
? - 或者我應該每次調用
graph()
時都要重新實例化plot
?
'.hide()'將數據保存在內存中 - 如果您想要再次顯示它,這是一個好主意。你試過了嗎? – Floris
我做到了。不幸的是,這並沒有解決問題。我有一種感覺,那是因爲它沒有重繪(或重新顯示)該圖或顯示該圖的「GTK繪圖區」。 –
用戶如何「關閉」窗口?以及它如何重新顯示 - 打開/之後發生什麼功能。一個.show()調用可能是需要的。 – Floris