Ich habe ein sehr einfaches Programm, das eine einfache Handlung auf Knopfdruck anzeigt. Mein Problem ist, wenn ich das Anwendungsfenster schließe, läuft das Programm weiter, bis ich es vom Terminal töte. Unten ist mein Code und meine Untersuchung ergab, dass das Problem durchSchließen des Fensters nicht alle Prozesse
matplotlib.use('TkAgg')
verursacht wird Aber ich weiß nicht, wie man es repariert! Wenn es hilft, laufe ich auf OSX.
#!/usr/bin/python
from Tkinter import *
import matplotlib
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
# ------ End of imports
class Ops:
def show_plot(self):
self.f, self.figarray = plt.subplots(1, sharex=True, sharey=True)
self.figarray.plot((1,2,3),(1,2,3))
plt.tight_layout()
self.canvas = FigureCanvasTkAgg(self.f, master=self.mainFrame)
self.canvas._tkcanvas.config(background='white', borderwidth=0, highlightthickness=0)
self.canvas._tkcanvas.pack(side=TOP, fill=BOTH)
class GUI(Ops):
def __init__(self, master):
self.master = master
self.width = self.master.winfo_screenwidth() # Width of the screen
self.height = self.master.winfo_screenheight() # Height of the screen
self.x = (self.width/2)
self.y = (self.height/2)
self.master.geometry("%dx%d+%d+%d" % (self.width, self.height, self.x, self.y))
self.mainFrame = Frame(self.master) # Generate the main container
self.mainFrame.pack()
# ---------- TOP FRAME ----------
self.topFrame = Frame(self.mainFrame)
self.topFrame.pack()
self.browse_button = Button(self.topFrame, text="Plot", command=self.show_plot)
self.browse_button.grid()
class App:
def __init__(self):
self.file_handler = Ops()
self.root = Tk()
self.gui_handler = GUI(self.root)
def run(self):
self.root.mainloop()
Application = App()
Application.run()
Der obige Code ist korrekt; es muss etwas anderes geben, das den Prozess verhindert. Erstellen Sie untergeordnete Prozesse oder Daemon-Threads? –
@AaronDigulla Das Problem tritt auf, wenn die Daten geplottet werden. Sonst geht es gut. Ich habe jetzt den ganzen Code mit Dummy-Daten hinzugefügt, so dass es reproduziert werden kann. – Sepehr
Hängt es beim Beenden, während die Daten geplottet werden? Hängt es, nachdem das Plotten beendet ist? –