IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxPython Discussion :

onpick event pour afficher une partie de zone séléctionner avec un Rectangleselector matplotlib wxpython [Python 3.X]


Sujet :

wxPython

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 44
    Points : 31
    Points
    31
    Par défaut onpick event pour afficher une partie de zone séléctionner avec un Rectangleselector matplotlib wxpython
    Bonjour a tout le monde ,

    je viens de definir un rectangle selector sur ma figure et ce qui permet de sélectionner des zones a définir ou à afficher après sur une autre frame ou une panel

    je viens de voir cet exemple de définir un event onpick qui permet de clicker sur un point sur le graphe et affiche un autre graphe de cette point sélectionner avec le click voilà lien : https://matplotlib.org/users/event_handling.html

    j'aimerai effectuer la même chose sur ma figure seulement que au lieu de clicker sur un point j'aimerai clicker au milieu de rectangle ou quelque part du rectangle et afficher cette zone sélectionner dans une autre panel ou frame peut import .

    y a t il une moyenn facile de faire ça ?! ou une autre méthode de clik par la souri et permet d'afficher la zone ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    import wx
    import numpy as np
    import matplotlib
    from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
    from matplotlib.figure import Figure
    import matplotlib.pyplot as plt
    from matplotlib.widgets import RectangleSelector
    import os
    import netCDF4 
    from netCDF4 import Dataset
     
    def line_select_callback(eclick, erelease):
     
        x1, y1 = eclick.xdata, eclick.ydata
        x2, y2 = erelease.xdata, erelease.ydata
        print("(%3.2f, %3.2f) --> (%3.2f, %3.2f)" % (x1, y1, x2, y2))
     
     
    class MyFrame(wx.Frame):
        def __init__(self, *args, **kwargs):
            wx.Frame.__init__(self, *args, **kwargs)
            panel = wx.Panel(self)
            sizer = wx.BoxSizer(wx.HORIZONTAL)
            self.select_button = wx.Button(panel, label="Select file")
            sizer.Add(self.select_button, 0, 0, 0)
            self.select_button.Bind(wx.EVT_BUTTON, self.pick_file)
            self.load_options = "netCDF4 files (nc)|*.nc| Text files (txt) |*.txt| All files |*.*"
            panel.SetSizer(sizer)
     
        def pick_file(self, event):
            with wx.FileDialog(self, "Pick files", wildcard=self.load_options,
                               style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST | wx.FD_MULTIPLE) as fileDialog:
                if fileDialog.ShowModal() != wx.ID_CANCEL:
                    chosen_file = fileDialog.GetPath()
                    if chosen_file.endswith('.txt'):
                        #Method pour utiliser autre frame
                        QuickLook(parent=self, text=chosen_file)
                    elif chosen_file.endswith('.nc'):
                        QuickLook_plot(self, text=chosen_file)
     
     
     
    class QuickLook_plot(wx.Panel):
        def __init__(self, parent,text=None):
            wx.Panel.__init__(self, parent,style=wx.SUNKEN_BORDER , size = (610,650))
            self.initiate_Matplotlib_Plot_Canvas()
        def initiate_Matplotlib_Plot_Canvas(self):
            self.figure = Figure(figsize =(8,6))
            self.axes = self.figure.add_subplot(111)
            self.canvas = FigureCanvas(self, -1, self.figure)
            self.sizer = wx.BoxSizer(wx.VERTICAL)
            self.sizer.Add(self.canvas, 1,flag=wx.ALL | wx.GROW)
            self.SetSizerAndFit(self.sizer)
     
            self.canvas.draw()
            #plot figure   
            ppath='D:/stage2019/air.departure.sig995.2012.nc'
     
            nc = Dataset('D:/stage2019/air.departure.sig995.2012.nc')
            lons = nc.variables['lon'][:]
            lats = nc.variables['lat'][:]
            air_dep = nc.variables['air_dep'][:,:,:]
            air_dep = air_dep[0,:,:]
     
            self.axes.pcolormesh(air_dep,cmap=plt.get_cmap('binary'))
     
            self.RS = RectangleSelector(self.axes,line_select_callback,
                                           drawtype='box', useblit=False,
                                           button=[1],minspanx=5, minspany=5,
                                           spancoords='pixels',
                                           interactive=True, rectprops = dict(facecolor='None',edgecolor='red',alpha=5,fill=False))
     
     
            self.RS.to_draw.set_visible(True)
            self.RS.extents = (600,1400,550,1600)
            self.figure.canvas.draw()
     
     
    class MyApp(wx.App):
        def OnInit(self):
            frame = MyFrame(None, -1, 'A test dialog')
            frame.Show()
            return True
     
    if __name__ == "__main__":
        app = MyApp()
        app.MainLoop()

    merci d'avance

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    bonjour,

    pour le zoom enfin faut juste définir des zoom axis du rectangle a partir de line_select_callback et après j'ai défini une nouvelle Frame ( c qui est gênant parce que j'aimerai mettre le zoom dans l'un des panel ) et après reste à définir nouvelle canvas dans le frame zoom et a chaque fois que on défini une plage dans le plot à l'aide du rectangle cela permet d'afficher la nouvelle frame zoom de la région défini par le rectangleselector

    voilà

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/10/2012, 17h01
  2. Réponses: 8
    Dernier message: 11/08/2006, 14h13
  3. créer une zone pour afficher une BMP scrollable
    Par hansaplast dans le forum wxWidgets
    Réponses: 15
    Dernier message: 14/03/2006, 09h25
  4. Réponses: 13
    Dernier message: 23/12/2004, 18h01
  5. Réponses: 3
    Dernier message: 29/08/2003, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo