Я использую tkinter, чтобы написать простую программу с графическим интерфейсом для построения графика некоторых данных, функция plot реализована с использованием модуля matplotlib, вот мой упрощенный код:
#!/usr/bin/env python
import Tkinter, tkFileDialog, tkMessageBox
from plot_core import berplot
class BerPlotTk(Tkinter.Frame):
def __init__ (self, master = None):
Tkinter.Frame.__init__(self, master, width = 500, height = 200)
self.fullfilenames = [] # filename with path
self.master = master
self.CreateWidgets()
def CreateWidgets(self):
# other widgets...
# Buttons
self.button_sel = Tkinter.Button(self, text = "Open", command = self.Open)
self.button_sel.grid(column = 0, row = 7, sticky = "EW")
self.button_plot = Tkinter.Button(self, text = "Plot", command = self.Plot)
self.button_plot.grid(column = 2, row = 7, sticky = "EW")
self.button_exit = Tkinter.Button(self, text = "Exit", command = self.top.quit)
self.button_exit.grid(column = 3, row = 7, sticky = "EW")
def Open(self):
input_filenames = tkFileDialog.askopenfilename(parent = self.master,
title = "Select the log file")
self.fullfilenames = list(self.tk.splitlist(input_filenames))
def Plot(self):
berplot(self.fullfilenames)
if __name__ == "__main__":
root = Tkinter.Tk()
app = BerPlotTk(root)
root.mainloop()
root.destroy()
berplot () - это функция в другом модуле python:
from matplotlib.pyplot import *
def berplot(filelist):
# retrieve data x, y from the log file
# ...
ber = semilogy(x, y)
# ...
show()
return 1
Программа может работать, когда я открываю файл данных и нажимаю кнопку «График», она создает окно рисунка (с помощью matplotlib), но графический интерфейс пользователя не может продолжать обрабатываться, пока я не закрою окно рисунка. Тем не менее, я хочу продолжать рисовать следующую фигуру, сохраняя текущую. Как я могу это понять?