gpt4 book ai didi

python - 重新打开 GTK 和 matplotlib 窗口 - GTK 窗口为空白

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:13 24 4
gpt4 key购买 nike

我的程序(使用 glade 使用 GTK 开发)接收一些数据,并可以选择显示一个包含 matplotlib 散点图 的单独窗口,该窗口代表数据。

我的问题是,如果用户关闭图形窗口并重新打开它,则不会显示任何图形。它只是一个空白的 GTK 窗口我确信有一个简单的修复方法,但是没有太多与我的问题相关的可用资源(或 GTKmatlplotlib 集成)。

我为我的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 吗?

最佳答案

我的解决方案:

来自:

class ScatterPlot:
def __init__(self):
#remove the following two lines
self.canvas = FigureCanvas(self.figure)
self.window.add(self.canvas)

将两行代码移至show()

def show(self):
self.canvas = FigureCanvas(self.figure)
self.window.add(self.canvas)
self.window.show_all()
self.is_hidden = False

移动这两行代码可以让图形在重新打开窗口时显示。

旁注:关闭窗口时调用 .destroy().show() 都可以。我不确定哪一个更好。

关于python - 重新打开 GTK 和 matplotlib 窗口 - GTK 窗口为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14647735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com