【发布时间】:2019-12-21 19:41:10
【问题描述】:
我最近开始使用 Python GTK 和 Glade 开发一些简单的 GUI。我创建了一个 GUI,它由一个带有按钮的主窗口组成,而按下按钮的动作是弹出第二个窗口,上面有一个 matplotlib 图。
我面临的问题是,当我关闭第二个窗口时,第一个窗口也关闭了,我希望能够单独终止它们。
下面是 python 代码,here 是带有 GUI 布局的 glade 文件。
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import numpy as np
from matplotlib.figure import Figure
from matplotlib.axes import Subplot
from matplotlib.backends.backend_gtk3agg import (
FigureCanvasGTK3Agg as FigureCanvas)
class PlotApp:
def __init__(self):
gladefile = 'GTK-two-windows.glade'
self.builder = Gtk.Builder()
self.builder.add_from_file(gladefile)
main_win = self.builder.get_object("window1")
main_win.connect("delete-event", Gtk.main_quit)
button = self.builder.get_object('button')
button.connect('clicked', self.plot)
main_win.show_all()
def plot(self, widget):
window2 = self.builder.get_object("window2")
window2.connect("delete-event", Gtk.main_quit)
scrolledwindow = self.builder.get_object("scrolledwindow")
# ----- Start of Matplotlib specific code -----
figure = Figure(figsize=(8, 6), dpi=71)
axis = figure.add_subplot(111)
t = np.arange(0.0, 3.0, 0.01)
s = np.sin(2*np.pi*t)
axis.plot(t, s)
axis.set_xlabel('time [s]')
axis.set_ylabel('voltage [V]')
canvas = FigureCanvas(figure) # a Gtk.DrawingArea
canvas.set_size_request(800, 600)
scrolledwindow.add_with_viewport(canvas)
# ----- End of Matplotlib specific code -----
window2.show_all()
if __name__ == "__main__":
main = PlotApp()
Gtk.main()
导入来自 vext.gi、numpy 和 matplotlib python 包,我使用的 Glade 版本是 3.22.1,我的操作系统是 Elementary Linux 5.1 Hera。
【问题讨论】: