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