Bonjour,
J'utilise python 2.7 et wxpython pour mon IHM. Je débute, et comme beaucoup de débutants à priori, je lutte avec la création des IHM.
Aujourd'hui mon IHM comporte trois zones (correspondant à 2 panels et 1 StatusBar) :
- Zone de bouton en haut
- Corps d'application contenant une grille
- StatusBar en bas contenant des champs TextCtrl
Elles sont instanciées de la manière suivante :
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 class PannelMenu(wx.Panel): def __init__(self,parent): wx.Panel.__init__(self, parent, -1, size = (1280, 90), pos = (0,0)) self.m_parent = parent self.m_sizeChanged = False self.m_parent.Bind(wx.EVT_SIZE, self.OnSize) self.m_parent.Bind(wx.EVT_IDLE, self.OnIdle) #======================================================================= # Création des boutons de menu #======================================================================= pic=wx.Bitmap("img/nouveau.png", \ wx.BITMAP_TYPE_ANY)#.ConvertToBitmap() self.buttonNew=wx.BitmapButton(self, -1, pic, pos=(10,10), size = (80,70)) self.Bind(wx.EVT_BUTTON,self.New, self.buttonNew) self.buttonNew.SetDefault() # ... et les autres boutons + évènements
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 class pannelParametre(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent, -1, size = (1280, 500), pos = (0,91)) self.m_parent = parent self.m_sizeChanged = False self.m_parent.Bind(wx.EVT_SIZE, self.OnSize) self.m_parent.Bind(wx.EVT_IDLE, self.OnIdle) self.myGrid = gl.Grid(self) self.myGrid.CreateGrid(15, 7) self.myGrid.EnableEditing(False) self.myGrid.SetSelectionMode(self.myGrid.wxGridSelectRows) self.myGrid.SetColLabelValue(0, "System parameter") self.myGrid.SetColLabelValue(1, "Value") self.myGrid.SetColLabelValue(2, "") self.myGrid.SetColLabelValue(3, "Minimum Value") self.myGrid.SetColLabelValue(4, "Maximum Value") self.myGrid.SetColLabelValue(5, "Resolution") self.myGrid.SetColLabelValue(6, "Unit") self.myGrid.AutoSize() sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.myGrid) self.SetSizer(sizer)Le tout est appelé par :
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 class PannelInformation(wx.StatusBar): def __init__(self, parent): #======================================================================= # Barre d'informations #======================================================================= wx.StatusBar.__init__(self, parent, -1, wx.STB_SHOW_TIPS) self.SetFieldsCount(4) self.SetStatusWidths([-4, -3, -3, -1]) # Définition des 4 zones d'affichage de la barre d'information self.m_sizeChanged = False self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_IDLE, self.OnIdle) self.SetStatusText("Fichier : ", 0) self.SetStatusText("Customer Reference : ", 1) self.t1 = wx.TextCtrl(self, -1, "", size=(200, -1)) self.t1.Disable() self.SetStatusText("Auteur : ", 2) self.t2 = wx.TextCtrl(self, -1, "", size=(200, -1)) self.t2.Disable() self.SetStatusText("Version 1.0", 3) self.Reposition()
Outre le fait que ma grille est très mal intégrée car sa taille ne s'adapte pas correctement (ne prend pas tout l'espace disponible, et si j'ajoute beaucoup de lignes elle passe par dessus la statusBar...), et pour cela je suis preneuse de conseil.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class IhmGenerale(wx.Frame): def __init__(self,parent,id,title): wx.Frame.__init__(self, parent = None, id = 1, title = title, size = (1280, 600)) wx.Frame.SetSizeHints(self, 1280, 600) self.parent = parent self.conteneurMenu = PannelMenu(self) self.conteneurGrille = pannelParametre(self) self.conteneurInformations = PannelInformation(self) self.SetStatusBar(self.conteneurInformations) self.Show(True)
Mon problème actuel est le suivant : Mes contrôles TextCtrl, une fois que je les rend modifiable avec la fonction Enable, j'ai beau cliquer dans le champs, ils ne prennent jamais le focus. C'est la grille qui a le focus. Je ne comprend pas pourquoi.
J'ai essayé d'enlever le Disable() a l'instanciation mais ça ne change rien. Quelqu'un a une idée ?
Merci d'avance.
ps : J'espère avoir été suffisamment claire, je voulais mettre des images mais le site me renvoie une erreur ...
Partager