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 :

Exemple de RichTextCtrl en wxpython


Sujet :

wxPython

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut Exemple de RichTextCtrl en wxpython
    Bonjour à tous,
    J'ai cherché à mettre dans une ''fenêtre de suivi'' les éléments suivants :
    - Des informations avec des lignes de différentes couleurs.
    - Des liens permettant de lancer des applications ou des liens internets.
    J'ai trouvé sur la démo de wx le contrôle wx.richtext.RichTextCtrl qui est très puissant

    Par contre j'ai passé un temps non négligeable pour faire ce que je voulais (surtout pour caler la fenêtre après un affichage).
    Si cela intéresse certains, je vous propose donc cet exemple simplifié :

    Alex


    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
     
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    # Exemple de GUI avec RichTextCtrl
     
    import wx
    import wx.richtext
    import os
     
     
    class MyFrame(wx.Frame):
        def __init__(self, *args, **kwds):
            kwds["style"] = wx.DEFAULT_FRAME_STYLE
            wx.Frame.__init__(self, *args, **kwds)
            self.rtc_suivi = wx.richtext.RichTextCtrl(self, wx.ID_ANY)
            self.__set_properties()
            self.__do_layout()
            for i in range(5):
                self.aff(u"ligne simple\n")
                self.aff(u"ligne rouge\n","red")
                self.aff(u"http://www.google.fr/\n","url")
                self.aff(u"google\n","url","http://www.google.fr")
                self.aff(u"python\n","url",r"C:\Python27\python.exe")
                self.aff(u"#####################\n","green")
     
     
        def __set_properties(self):
            self.SetTitle("Test wx.richtext.RichTextCtrl")
            self.rtc_suivi.SetMinSize((300, 300))
            self.rtc_suivi.SetEditable(False)
     
            self.urlStyle = wx.richtext.TextAttrEx()
            self.urlStyle.SetTextColour(wx.BLUE)
            self.urlStyle.SetFontUnderlined(True)
            self.urlStyle.SetFontSize(8)
     
     
        def __do_layout(self):
            sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
            sizer_1.Add(self.rtc_suivi, 0, 0, 0)
            self.SetSizer(sizer_1)
            sizer_1.Fit(self)
            self.Layout()
     
        def aff(self,texte,couleur="black",chemin=False):
            """ Affichage dans wx.richtext.RichTextCtrl 
                "texte" est le texte à afficher
                "couleur" est la couleur du texte au format wx,pour un lien mettre "url" 
                "chemin" est le chemin spécifié si différent du texte
            """
            self.rtc_suivi.MoveEnd()
            if couleur=="url":
                if not chemin:
                    chemin=texte
                self.rtc_suivi.BeginStyle(self.urlStyle)
                self.rtc_suivi.BeginURL(chemin)
                self.rtc_suivi.WriteText(texte)
                self.rtc_suivi.EndURL();
                self.rtc_suivi.EndStyle();
                self.rtc_suivi.Bind(wx.EVT_TEXT_URL, self.OnURL)
            else:
                self.rtc_suivi.BeginTextColour(couleur)
                self.rtc_suivi.WriteText(texte)
                self.rtc_suivi.EndTextColour()
     
            last=self.rtc_suivi.GetLastPosition()
            self.rtc_suivi.ShowPosition(last)
     
        def OnURL(self, evt):
            """ Lancement du lien """
            os.startfile(evt.GetString())
     
    if __name__ == "__main__":
        app = wx.PySimpleApp(0)
        wx.InitAllImageHandlers()
        frame_1 = MyFrame(None, wx.ID_ANY, "")
        app.SetTopWindow(frame_1)
        frame_1.Show()
        app.MainLoop()

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Dans un premier temps merci de partager ton code.

    os.startfile étant Windows only l'utilisation du module webbrowser l'aurais rendu plus universel.

    @+

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut
    Bonjour PauseKawa donc cela vient à remplacer en ligne 71:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    os.startfile(evt.GetString())
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    webbrowser.open_new((evt.GetString()))
    Alex

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Et de modifier les imports bien sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import wx
    import wx.richtext
    import webbrowser

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Question : Le pourquoi de __set_properties et __do_layout ?
    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
        def __init__(self, *args, **kwds):
            kwds["style"] = wx.DEFAULT_FRAME_STYLE
            wx.Frame.__init__(self, *args, **kwds)
            self.rtc_suivi = wx.richtext.RichTextCtrl(self, wx.ID_ANY)
            self.SetTitle("Test wx.richtext.RichTextCtrl")
            self.rtc_suivi.SetMinSize((300, 300))
            self.rtc_suivi.SetEditable(False)
            self.urlStyle = wx.richtext.TextAttrEx()
            self.urlStyle.SetTextColour(wx.BLUE)
            self.urlStyle.SetFontUnderlined(True)
            self.urlStyle.SetFontSize(8)
            sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
            sizer_1.Add(self.rtc_suivi, 0, 0, 0)
            self.SetSizer(sizer_1)
            sizer_1.Fit(self)
            self.Layout()
            for i in range(5):
                self.aff(u"ligne simple\n")
                self.aff(u"ligne rouge\n","red")
                self.aff(u"http://www.google.fr/\n","url")
                self.aff(u"google\n","url","http://www.google.fr")
                self.aff(u"python\n","url",r"C:\Python27\python.exe")
                self.aff(u"#####################\n","green")
    @+

  6. #6
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Par contre avec webbrowser il vas falloir revoir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.aff(u"python\n","url",r"C:\Python27\python.exe")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            if couleur=="url":
                if not chemin:
                    chemin=texte
                self.rtc_suivi.BeginStyle(self.urlStyle)
                self.rtc_suivi.BeginURL(chemin)
                self.rtc_suivi.WriteText(texte)
                self.rtc_suivi.EndURL();
                self.rtc_suivi.EndStyle();
                self.rtc_suivi.Bind(wx.EVT_TEXT_URL, self.OnURL)
    De plus dans ce cas j'aurais rajouter un test de faisabilité.

    @+

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Une autre utilisation de webbrowser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import urllib
    import webbrowser
    webbrowser.open("mailto:%s?subject=%s&body=%s" % 
                    ("destinataire@python.fr",
                    urllib.quote("test"),
                    urllib.quote('test')))
    Cela vous permet plus de choix : "mail", "url", "bin" par exemple.
    Mais bon, ce n'est que des "Enhancement Proposals".

    @+

Discussions similaires

  1. WxPython - RichTextCtrl - menu contextuel
    Par pibol dans le forum wxPython
    Réponses: 1
    Dernier message: 04/04/2010, 19h02
  2. Réponses: 4
    Dernier message: 18/04/2005, 09h06
  3. [VB6] Lancer un service, par exemple Sql Server
    Par fea dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/10/2002, 14h07
  4. recherche exemple simple pour corba en c++
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 11h29

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