2017-06-27 14 views
0

Cher tous les programmeurs passionés,wxPython - Mise à jour du terrain sur le changement de paramètre spécifique

Je programme une interface graphique pour enquêter sur mes données. Ces données sont affichées dans un tracé 3D sur un panneau. Le tracé remplit une figureCanvas préparée sur mon GUI au moment où j'appuie sur un bouton. La fonction Plot rassemble des informations sur les paramètres de mon interface et est créée. Je souhaite automatiser le processus en permettant à la fonction de toujours créer un nouveau tracé lorsqu'un paramètre est modifié.

Je suis plus qu'impuissant en ce moment. Peut-être qu'il y a quelque chose qui me manque. Y at-il un module que je peux utiliser? Ou est-il un moyen commun de faire quelque chose comme ça:

class MainFrame(wx.Frame): 

def __init__(self, *args, **kwargs): 
    super(MainFrame, self).__init__(*args, **kwargs) 

    self.InitUI() 
    self.Show(True) 

def InitUI(self):  
    print __doc__ 
    self.figure1 = Figure(figsize=(1,1)) 
    self.mft_plot = FigureCanvas(panel, -1, self.figure1) 

    self.SpinCtrl_Y = wx.SpinCtrl(panel, value="0", size=(60,30), max = 10000) # Y 
self.SpinCtrl_times = wx.SpinCtrl(panel, value="0",size=(100,30),min=-200, max=500) # time 

    btn5 = wx.Button(panel, label = 'Create Vol. Image', pos = ((650), 10), 
        size = (150, 25)) 
    btn5.Bind(wx.EVT_BUTTON, self.OnPlotCreation) 

def OnPlotCreation(self, e): 
    print 'Waiting for time point..' 


    t_enter = self.SpinCtrl_times.GetValue() 
     # Transform time sample point to dimensional time point .. 
    self.t_in_ms0 = t_enter * 1e3 

    print 'Seleted time point is: %.2f ms' %self.t_in_ms0 

    # Check for a threshold.. 
    threshold = self.mftthreshold.GetValue() 

    self.figure1.clear() 
    print 'Plot.' 
    plotting.plot_stat_map(index_img(self.img, float(t_enter)), figure = self.figure1, threshold= threshold, cut_coords=(self.SpinCtrl_Y.GetValue()), 
          annotate=True, title='t=%.2f ms' %self.t_in_ms0) 

Pour un exemple simple que je vous posté ce, un peu lil long, exemple de code. Le but que je veux réaliser est que la fonction s'exécute automatiquement après self.mftthreshold ou self.SpinCtrl_times ou self.SpinCtrl_Y a été changé.

J'espère que n'importe qui peut me donner une biche sur comment rendre ceci possible.

Salutations, Thankful Daniel

+0

Liez les contrôles de rotation en utilisant 'wx.EVT_SPINCTRL' à' self.OnPlotCreation'. Malheureusement, vous avez laissé des parties clés hors de votre échantillon de code, il est donc difficile de dire avec certitude. –

+0

Merci. C'est une solution assez facile. Très pythonique. –

Répondre

0

Donc, la solution était:

class MainFrame(wx.Frame): 

def __init__(self, *args, **kwargs): 
    super(MainFrame, self).__init__(*args, **kwargs) 

    self.InitUI() 
    self.Show(True) 

def InitUI(self):  
    print __doc__ 
    self.figure1 = Figure(figsize=(1,1)) 
    self.mft_plot = FigureCanvas(panel, -1, self.figure1) 

    self.SpinCtrl_Y = wx.SpinCtrl(panel, value="0", size=(60,30), max = 10000) # Y 
    self.SpinCtrl_times = wx.SpinCtrl(panel, value="0",size=(100,30),min=-200, max=500) # time 

    btn5 = wx.Button(panel, label = 'Create Vol. Image', pos = ((650), 10), 
        size = (150, 25)) 

    btn5.Bind(wx.EVT_BUTTON, self.OnPlot) 
    ***self.SpinCtrl_times.Bind(wx.EVT_SPINCTRL , self.OnPlot)*** 

def OnPlotCreation(self, e): 
    print 'Waiting for time point..' 


    t_enter = self.SpinCtrl_times.GetValue() 
     # Transform time sample point to dimensional time point .. 
    self.t_in_ms0 = t_enter * 1e3 

    print 'Seleted time point is: %.2f ms' %self.t_in_ms0 

    # Check for a threshold.. 
    threshold = self.mftthreshold.GetValue() 

    self.figure1.clear() 
    print 'Plot.' 
    plotting.plot_stat_map(index_img(self.img, float(t_enter)), figure = self.figure1, threshold= threshold, cut_coords=(self.SpinCtrl_Y.GetValue()), 
          annotate=True, title='t=%.2f ms' %self.t_in_ms0) 

Merci pour l'aide Rolf de Saxe.