Mayavi aus GUI aufrufen 2. Versuch

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Carsten1983
User
Beiträge: 20
Registriert: Montag 9. Juni 2008, 14:17
Wohnort: Halle/Saale

Donnerstag 12. Juni 2008, 08:37

Hallo,
Auf Hinweis habe ich den Beitrag und den Code stark editiert:
Es geht darum aus einem GUI das Programm Mayavi aufzurufen, etwas zu plotten und dann wieder zu beenden. Mein Problem liegt darin, das Programm ordnungsgemäß zu beenden. Bis jetzt mache ich es so, dass ich nach 5 Sekunden (als Event) das Programm beende. Diese Lösung ist natürlich blöd. Beende ich das Programm einfach über das "x" am oberen Rand oder Quit aus dem Mayavi GUI (wie es ja jeder user tun würde) und ich möchte Mayavi danach erneut aus dem Hauptprogramm aufrufen, stürzt das Programm ab. Vermutlich weil es nicht "richtig" beendet wurde.

Mein Problem ist eigentlich, dass ich nicht weiß was für ein Event ich außer der Zeitverzögerung nehmen könnte und wie ich es einbauen müsste.

Code: Alles auswählen

# -*- coding: cp1252 -*-
import mayavi
import wx


class MainFrame(wx.Frame):
    def __init__(self,parent,title=""):
    # nichts aendern
        wx.Frame.__init__(self,parent,-1,title,size=(250,400))
        self.Show(True)
        self.createWidgets()
    def createWidgets(self):
        
        plotButton=wx.Button(self,-1,"Plot Data",pos=(5,55))
        wx.EVT_BUTTON(self, plotButton.GetId(),self.plotten)
        writeButton=wx.Button(self,-1,"Write UMAT",pos=(5,80))
        exitButton=wx.Button(self,-1,"Exit",pos=(5,105))
        wx.EVT_BUTTON(self, exitButton.GetId(),self.OnExit)
        return
    
    def OnExit(self,event):
        self.Destroy()
        return
    
    def plotten(self,event): 
        def quitmaya(v):
            v.master.quit()
            v.quit()
            return
        v=mayavi.mayavi()
        # Problem ist hier: weil ich keine Ahnung hab wie ich
        # mayavi vernünftig verlassen soll außer so:
        v.master.after(5000,quitmaya,v)
        v.master.mainloop()
        return
  
class MyApp(wx.App):
    def OnInit(self):
        self.frame = MainFrame(None, "Interpolation Dings")
        self.SetTopWindow(self.frame)
        return True

MyApp().MainLoop()
    

Ich hoffe das Problem ist jetzt klarer formuliert als vorher. Und auch über Lösungsvorschläge würde ich mich sehr freuen.


mfg Carsten
Antworten