Python 使用Gtk应用程序中的matplotlib.pyplot

Python 使用Gtk应用程序中的matplotlib.pyplot,python,matplotlib,gtk,Python,Matplotlib,Gtk,我在Python2.7上实现了一个非常简单的Gtk应用程序,它所做的只是打开一个主窗口。我想做的是打开另一个窗口,在用户输入后使用pyplot绘制一些数据。现在为了使事情更简单,我只是忽略处理用户输入,我只是尝试从主应用程序窗口的init函数中绘制一些东西 不幸的是,这并不像预期的那样有效。主应用程序窗口按预期打开,但plt.plot()命令中的窗口似乎完全死机。没有打印任何内容,我甚至无法关闭窗口,除非我先关闭主应用程序窗口 任何帮助都将不胜感激 下面是我试图运行的代码示例 from gi.r

我在Python2.7上实现了一个非常简单的Gtk应用程序,它所做的只是打开一个主窗口。我想做的是打开另一个窗口,在用户输入后使用pyplot绘制一些数据。现在为了使事情更简单,我只是忽略处理用户输入,我只是尝试从主应用程序窗口的init函数中绘制一些东西

不幸的是,这并不像预期的那样有效。主应用程序窗口按预期打开,但plt.plot()命令中的窗口似乎完全死机。没有打印任何内容,我甚至无法关闭窗口,除非我先关闭主应用程序窗口

任何帮助都将不胜感激

下面是我试图运行的代码示例

from gi.repository import Gtk
import matplotlib.pyplot as plt

class MyGraphApp():    
    def __init__(self):
        self.geometry = (500, 500)
        self.main_win = self.create_window_layout()             # main window        
        self.fig = plt.figure()
        plt.plot([0,10], [10, 10])

    def destroy(self, widget, data=None):
        Gtk.main_quit()

    def main(self):
        Gtk.main()

    def create_window_layout(self):
        win = Gtk.Window(Gtk.WindowType.TOPLEVEL)
        self.main_vbox = Gtk.VBox(False, 1)
        self.main_vbox.set_border_width(1)
        win.add(self.main_vbox)
        self.main_vbox.show()

        self.headerbar = Gtk.HeaderBar(title="Main Window")
        self.headerbar.props.show_close_button = True                
        win.set_titlebar(self.headerbar)

        win.set_default_size(self.geometry[0], self.geometry[1])
        win.set_position(Gtk.WindowPosition.CENTER)
        win.connect("delete_event", self.destroy) 
        win.show_all() 

        return win

myGraphApp = MyGraphApp()
myGraphApp.main()

你好你试了什么?你找到导致挂断的代码了吗?并不是事情“挂断”。发生的情况是,包含图形的窗口没有响应任何用户界面:所有按钮都没有响应,您无法关闭窗口,甚至无法看到绘图本身。您可以注释掉代码中的所有行,然后让它运行,并在以后的每次尝试中重新添加一行代码。因此,您可以了解是某一行代码导致了问题,还是整个事情都搞砸了……问题不在于代码。问题是Gtk与matplotlib后端的交互。由于我对后端不太了解,我想问问社区,我无法重现你的问题。但是,在单独的线程中启动它可能会有所帮助。还值得考虑将这些小部件嵌入到您的窗口中。