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 :

Classes de contrôle personnalisé (dérivée)


Sujet :

wxPython

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Par défaut Classes de contrôle personnalisé (dérivée)
    Bonjour à tous et toutes,

    Suite à ma tentative de synchronisation (position du texte) de deux textctrl resté sans réponse, j’ai décidé de crée un objet un texte avec une scrollbar.

    Mais un problème me bloque. Je voudrais faire un objet comme un textcrl avec toutes ses méthodes. (ex : monObjet.appendText(‘toto’) ). Mais je ne sais pas comment le coder.

    Pour le moment j’ai fait ce bout de code, mais si je veux mettre cet objet dans un boxsizer l’affichage n’est pas concluant. Pour régler cela je suis obligé de mettre l’objet dans un panel.
    Ma question est : est ce que mon objet est correctement codé si oui est il possible d’intégrer le panel directement dans l’objet pour ne pas a avoir a le faire par la suite.

    Voici le code simplifié ne gérant pas la scrollbar
    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
    import wx
    import sys, traceback
     
    class TextScroll(wx.TextCtrl):
    	def __init__(self, parent):
    		self.parent = parent
     
    		wx.TextCtrl.__init__(self, parent, style=wx.TE_MULTILINE|wx.TE_RICH|wx.TE_READONLY|wx.TE_NOHIDESEL|wx.HSCROLL|wx.TE_NO_VSCROLL)
    		self.ScrollBar = wx.ScrollBar(parent,-1,style=wx.VERTICAL)
     
    		self.Box = wx.BoxSizer(wx.HORIZONTAL)
    		self.Box.Add(self, 1, wx.EXPAND)
    		self.Box.Add(self.ScrollBar,0,wx.RIGHT|wx.EXPAND)
    		parent.SetSizer(self.Box)
     
    class FrameScrollFrame(wx.Frame):
    	def __init__(self, parent, title):
    		wx.Frame.__init__(self, parent, title=title)
     
    		panel = wx.Panel(self)
    		panel.SetBackgroundColour("red")
     
    		#'''
    		# version sans panel
    		log_tc = TextScroll(panel)
     
    		Box = wx.BoxSizer(wx.HORIZONTAL)
    		txt1 = wx.StaticText(panel, label = "test")
    		Box.Add(txt1, 0, wx.CENTER, 5)
    		Box.Add(log_tc, 1, wx.EXPAND)
    		txt2 = wx.StaticText(panel, label = "test")
    		Box.Add(txt2, 0, wx.CENTER, 5)
    		panel.SetSizer(Box)
     
    		'''
                    # version avec panel
                    panel2 = wx.Panel(panel)
                    panel2.SetBackgroundColour("blue")
                    log_tc = TextScroll(panel2)
                    
                    Box = wx.BoxSizer(wx.HORIZONTAL)
                    txt1 = wx.StaticText(panel, label = "test")
                    Box.Add(txt1, 0, wx.CENTER, 5)
                    Box.Add(panel2, 1, wx.EXPAND)
                    txt2 = wx.StaticText(panel, label = "test")
                    Box.Add(txt2, 0, wx.CENTER, 5)
                    panel.SetSizer(Box)
                    '''
     
    		self.SetSize((600,500))
     
    		for i in range(10):
    			log_tc.AppendText("toto%s\r\n"%(i+1))
     
    		self.Show()
     
    if __name__ == '__main__':
    	try:
    		app = wx.PySimpleApp(redirect=True)
    		frm = FrameScrollFrame(None, "text scroll")
    		app.SetTopWindow(frm)
    		app.MainLoop()
    	except:
    		traceback.print_exc (file=open('error_scrolltext.txt', 'w'))
    Cordialement
    Jean-Michel

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Par défaut
    bonjour a tous,

    mon post n'est pas clair vous faut il d'autres informations?

    Jean-Michel

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 76
    Par défaut
    Salut !

    Je galère toujours moi même avec les sizers, les panels et leur mise en forme... et ta question n'a pas dérogée à la règle

    Pour être franc, je ne sais pas si je t'apporte une solution, à toi de juger

    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
    import wx
    import sys, traceback
     
    class TextScroll(wx.TextCtrl):
     
    	def __init__(self, parent):
     
    		self.panel = wx.Panel(parent)
    		self.panel.SetBackgroundColour("blue")
    		wx.TextCtrl.__init__(self, self.panel, style=wx.TE_MULTILINE|wx.TE_RICH|wx.TE_READONLY|wx.TE_NOHIDESEL|wx.HSCROLL|wx.TE_NO_VSCROLL)
    		self.ScrollBar = wx.ScrollBar(self.panel,-1,style=wx.VERTICAL)
     
    		self.Box = wx.BoxSizer(wx.HORIZONTAL)
    		self.Box.Add(self, 1, wx.EXPAND)
    		self.Box.Add(self.ScrollBar,0,wx.RIGHT|wx.EXPAND)
    		self.panel.SetSizer(self.Box)
     
     
    class FrameScrollFrame(wx.Frame):
    	def __init__(self, parent, title):
    		wx.Frame.__init__(self, parent, title=title)
     
    		panel = wx.Panel(self)
    		panel.SetBackgroundColour("red")
     
    		log_tc = TextScroll(panel)
     
    		Box = wx.BoxSizer(wx.HORIZONTAL)
    		txt1 = wx.StaticText(panel, label = "test")
    		Box.Add(txt1, 0, wx.CENTER, 5)
    		Box.Add(log_tc.panel, 1, wx.EXPAND)
    		txt2 = wx.StaticText(panel, label = "test")
    		Box.Add(txt2, 0, wx.CENTER, 5)
    		panel.SetSizer(Box)
     
    		self.SetSize((600,500))
     
    		for i in range(10):
    			log_tc.AppendText("toto%s\r\n"%(i+1))
     
    		self.Show()
     
    if __name__ == '__main__':
    	try:
    		app = wx.PySimpleApp(redirect=True)
    		frm = FrameScrollFrame(None, "text scroll")
    		app.SetTopWindow(frm)
    		app.MainLoop()
    	except:
    		traceback.print_exc (file=open('error_scrolltext.txt', 'w'))
    Le panel est intégré à la class TextScroll... mais j'ai du le définir comme propriété pour l'utiliser dans le sizer au niveau de la fenêtre principale.

    J'ai presque obtenu de bon résultats avec Fit() mais ça n'a rien donné de bien concluant... à garder en mémoire cependant, il semble que parfois il faille l'utiliser pour redessiner correctement une portion de la fenêtre.

    Sur la construction de ton objet je ne saurais trop me prononcer. Personnellement, je construis souvent une classe englobant un groupe de fonctionnalité mais je fais hériter cette classe de wx.Panel. Ensuite je définis comme propriétés les autres objets de wx, par exemple une scrollbar.

    En espérant t'avoir un peu aidé

Discussions similaires

  1. Classes de contrôle personnalisé
    Par Shadok dans le forum wxPython
    Réponses: 4
    Dernier message: 26/11/2008, 16h18
  2. [Classes] - Fonctions virtuelles et dérivées
    Par buzzkaido dans le forum C++
    Réponses: 2
    Dernier message: 18/01/2007, 21h51
  3. Pbs chargement de classe de contrôle
    Par meroem dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 06/12/2006, 09h14
  4. [PHP-JS] Classe de contrôle de formulaire
    Par MV1908 dans le forum Langage
    Réponses: 4
    Dernier message: 10/10/2006, 00h01
  5. [VB.NET] Contrôle personnalisé dans une dll personnalisée
    Par c3b12 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/10/2004, 07h56

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