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 :

recupérer une valeur d'une classe


Sujet :

wxPython

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 57
    Points : 46
    Points
    46
    Par défaut recupérer une valeur d'une classe
    Bonjour,

    Je débute avec wxPython et là, je suis en train d'étudier la possibilité de créer un sélecteur de date.
    En voici le code:
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    #-------------------------------------------------------------------------------
    # Name:        Calendar_Panel
    # Purpose:     Test de wx.lib.calendar depuis wxPython
    #              montre les weekends et le jours fériés en différentes couleurs
    # Author:
    #
    # Created:     13/08/2013
    # Copyright:
    # Licence:     GPL
    #-------------------------------------------------------------------------------
    # -*- coding: UTF-8 -*-
    from __future__ import unicode_literals
    import wx
    import wx.lib.calendar
     
    class Calendar_Panel(wx.Panel):
        """ crée un panel avec un calendar"""
        def __init__(self, parent, id):
            # create a panel
            wx.Panel.__init__(self, parent, id)
     
            # cree un label sur le panel
            self.label1 = wx.StaticText(self, id, "", wx.Point(25, 220))
     
            # cree le calendar
            self.cal = wx.lib.calendar.Calendar(self, id, pos=(25, 35), size=(200, 180))
     
            # va chercher l'anée et le mois courant
            start_month = self.cal.GetMonth()
            start_year = self.cal.GetYear()
     
            # set des couleurs
            self.SetBackgroundColour("#DEB887")
            self.cal.SetWeekColor('#FFFFFF', '#0000FF')
            self.cal.SetColor(wx.lib.calendar.COLOR_WEEKEND_FONT, '#FF0000')
            self.cal.SetColor(wx.lib.calendar.COLOR_WEEKEND_BACKGROUND, '#D3D3D3')
            self.cal.ShowWeekEnd()
     
            # couleur des fériés
            self.set_days = holidays[start_month]
            self.cal.AddSelect(self.set_days, '#FF0000', '#FFFF00')
            self.cal.Refresh()
     
            # click de la souris sur un jour
            self.Bind(wx.lib.calendar.EVT_CALENDAR, self.OnCalSelected)
     
            # cree le selecteur d'année
            self.texty = wx.TextCtrl(self, -1, str(start_year), pos=(25, 10), size=(50, -1))
            h = self.texty.GetSize().height
            self.spiny = wx.SpinButton(self, -1, pos=(70, 10), size=(h*2, h))
            self.spiny.SetRange(2010, 2050) # laps de temps
            self.spiny.SetValue(start_year)
            self.Bind(wx.EVT_SPIN, self.OnSpiny, self.spiny)
     
            # cree le selecteur de mois
            self.textm = wx.TextCtrl(self, -1, str(start_month), pos=(140, 10), size=(50, -1))
            h = self.textm.GetSize().height
            self.spinm = wx.SpinButton(self, -1, pos=(185, 10), size=(h*2, h))
            self.spinm.SetRange(1, 12)
            self.spinm.SetValue(start_month)
            self.Bind(wx.EVT_SPIN, self.OnSpinm, self.spinm)
     
        def OnCalSelected(self, evt):
            text = "Date sélectionnée = %02d/%02d/%d" % (evt.day, evt.month, evt.year)
            laDate= "%02d/%02d/%d" % (evt.day, evt.month, evt.year) #uniquement la date
            self.label1.SetLabel(text)
     
     
        def OnSpiny(self, event):
            year = event.GetPosition()
            self.texty.SetValue(str(year))
            self.cal.SetYear(year)
            self.ResetDisplay()
     
        def OnSpinm(self, event):
            month = event.GetPosition()
            self.textm.SetValue(str(month))
            self.cal.SetMonth(month)
            self.ResetDisplay()
     
        def ResetDisplay(self):
            # reset de la couleur des fériés (quand on change de mois ou d'année)
            self.cal.AddSelect(self.set_days, 'black', 'white')
            # va chercher le numero du mois
            month = self.cal.GetMonth()
            set_days = holidays[month]
            # set de la nouvelle couleur de fériés
            self.cal.AddSelect(set_days, 'red', 'white')
            self.cal.Refresh()
            # garde la nouvelle liste en memoire
            self.set_days = set_days
     
     
    # ici les dates des fériés
    # ce sont UNIQUEMENT les jours fériés FIXES
    # {mois: [liste des jours]}
    holidays = {
    1: [1],
    2: [],
    3: [],
    4: [],
    5: [1],
    6: [],
    7: [21],
    8: [15],
    9: [],
    10: [],
    11: [1, 11],
    12: [25, 31]
    }
     
    app = wx.App()
    # cree une frame, sans parent, -1 pour default ID
    frame = wx.Frame(None, -1, "Simple calendrier", size = (260, 280))
    # instanciation de classe
    Calendar_Panel(frame, -1)
    frame.Show(1)
     
     
    app.MainLoop()
    A présent, lorsque je clique sur une date, celle-ci s'affiche dans le panel_Calendar, mais je voudrais pouvoir récupérer la valeur "laDate" pour pourvoir l'utiliser ailleurs, c-à-d, pour pouvoir utiliser cette date pour créer un evenement via une autre classe.
    Mon problème, c'est que je ne sais comment faire

    Merci d'avance de vos réponses,

    Pierre

  2. #2
    Membre averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    Par défaut
    Bonjour,

    Voici comment je fais en général, ma classe principal en appel une autre.

    Alexandre

    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    # -*- coding: UTF-8 -*-
    # Le coding doit être la 1ère ou 2eme ligne !! (voir http://www.python.org/dev/peps/pep-0263/)
    #-------------------------------------------------------------------------------
    # Name:        Calendar_Panel
    # Purpose:     Test de wx.lib.calendar depuis wxPython
    #              montre les weekends et le jours fériés en différentes couleurs
    # Author:
    #
    # Created:     13/08/2013
    # Copyright:
    # Licence:     GPL
    #-------------------------------------------------------------------------------
    from __future__ import unicode_literals
    import wx
    import wx.lib.calendar
     
    class Calendar_Panel(wx.Panel):
        """ crée un panel avec un calendar"""
        def __init__(self, parent, id):
            global text_date
            # create a panel
            self.panel1=wx.Panel.__init__(self, parent, id)
     
            # cree un label sur le panel
            self.label1 = wx.StaticText(self, id, "", wx.Point(25, 220))
     
            # cree le calendar
            self.cal = wx.lib.calendar.Calendar(self, id, pos=(25, 35), size=(200, 180))
     
            # va chercher l'anée et le mois courant
            start_month = self.cal.GetMonth()
            start_year = self.cal.GetYear()
     
            # set des couleurs
            self.SetBackgroundColour("#DEB887")
            self.cal.SetWeekColor('#FFFFFF', '#0000FF')
            self.cal.SetColor(wx.lib.calendar.COLOR_WEEKEND_FONT, '#FF0000')
            self.cal.SetColor(wx.lib.calendar.COLOR_WEEKEND_BACKGROUND, '#D3D3D3')
            self.cal.ShowWeekEnd()
     
            # couleur des fériés
                    # ici les dates des fériés
            # ce sont UNIQUEMENT les jours fériés FIXES
            # {mois:[liste des jours]}
            holidays = {
            1: [1],
            2: [],
            3: [],
            4: [],
            5: [1],
            6: [],
            7: [21],
            8: [15],
            9: [],
            10: [],
            11: [1, 11],
            12: [25, 31]
            }
            self.set_days = holidays[start_month]
            self.cal.AddSelect(self.set_days, '#FF0000', '#FFFF00')
            self.cal.Refresh()
     
            # click de la souris sur un jour
            self.Bind(wx.lib.calendar.EVT_CALENDAR, self.OnCalSelected)
     
            # cree le selecteur d'année
            self.texty = wx.TextCtrl(self, -1, str(start_year), pos=(25, 10), size=(50, -1))
            h = self.texty.GetSize().height
            self.spiny = wx.SpinButton(self, -1, pos=(70, 10), size=(h*2, h))
            self.spiny.SetRange(2010, 2050) # laps de temps
            self.spiny.SetValue(start_year)
            self.Bind(wx.EVT_SPIN, self.OnSpiny, self.spiny)
     
            # cree le selecteur de mois
            self.textm = wx.TextCtrl(self, -1, str(start_month), pos=(140, 10), size=(50, -1))
            h = self.textm.GetSize().height
            self.spinm = wx.SpinButton(self, -1, pos=(185, 10), size=(h*2, h))
            self.spinm.SetRange(1, 12)
            self.spinm.SetValue(start_month)
            self.Bind(wx.EVT_SPIN, self.OnSpinm, self.spinm)
     
        def OnCalSelected(self, evt):
            text = "Date sélectionnée = %02d/%02d/%d" % (evt.day, evt.month, evt.year)
            laDate= "%02d/%02d/%d" % (evt.day, evt.month, evt.year) #uniquement la date
            self.label1.SetLabel(text)
            p=Perso(laDate) # --- Utilisation d'une autre classe ----
            print p.text_date+" vue dans la classe Calendar_Panel"
     
     
        def OnSpiny(self, event):
            year = event.GetPosition()
            self.texty.SetValue(str(year))
            self.cal.SetYear(year)
            self.ResetDisplay()
     
        def OnSpinm(self, event):
            month = event.GetPosition()
            self.textm.SetValue(str(month))
            self.cal.SetMonth(month)
            self.ResetDisplay()
     
        def ResetDisplay(self):
            # reset de la couleur des fériés (quand on change de mois ou d'année)
            self.cal.AddSelect(self.set_days, 'black', 'white')
            # va chercher le numero du mois
            month = self.cal.GetMonth()
            set_days = holidays[month]
            # set de la nouvelle couleur de fériés
            self.cal.AddSelect(set_days, 'red', 'white')
            self.cal.Refresh()
            # garde la nouvelle liste en memoire
            self.set_days = set_days
     
    class Perso:
        def __init__(self,laDate):
            self.text_date=laDate
            print self.text_date+" vue dans la classe Perso"
     
     
    if __name__ == "__main__":
            app = wx.App()
            # cree une frame, sans parent, -1 pour default ID
            frame = wx.Frame(None, -1, "Simple calendrier", size = (260, 280))
            # instanciation de classe
            Calendar_Panel(frame, -1)
            frame.Show(1)
            app.MainLoop()

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Merci

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Bonjour,
    Ben finalement, mon problème n'est pas tout à fait résolu...
    en fait, j'aurais voulu récupérer la valeur de "laDate" pour la mettre dans un label contenu dans la frame, un truc du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if __name__ == "__main__":
            app = wx.App()
            # cree une frame, sans parent, -1 pour default ID
            frame = wx.Frame(None, -1, "Simple calendrier", size = (260, 280))
            # instanciation de classe
            Calendar_Panel(frame, -1)
            #recup et affichage de la date sélectionnée
            label=wx.StaticText(frame, id, )
            label.SetLabel(laDate)
            frame.Show(1)
            app.MainLoop()

  5. #5
    Membre averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    Par défaut
    Bonjour,

    Je te propose de créer ton interface en faisant un code wx qui fonctionne
    et en mettant un texte bidon à la place de la date choisie.
    Cela permettra de voir comment tu veux organiser

    Cordialement

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 11h05
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. passer une valeur d'une requête a une table
    Par LesLemmings dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/06/2006, 14h13
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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