我的程序(使用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