Bonsoir,
Je débute en wxPython (et en interface graphique même si j'ai un peu manipulé Tkinter et je suis auto-didacte) et il y a quelque chose que je ne comprends pas bien.
J'aimerais ouvrir depuis ma Frame principale une autre Frame et que cette Frame soit placée devant ma Frame principale.
J'ai isolé mon problème dans le script suivant:
Et je remarque une différence de comportement que je ne m'explique pas.
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 import wx class App(wx.App): def OnInit(self): self.frame=FirstFrame() self.frame.Centre() self.frame.Show() return True class FirstFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,"First Frame",size=(800,600)) panel=wx.Panel(self) button=wx.Button(panel,-1,"Second Frame") self.Bind(wx.EVT_BUTTON,self.OnClickOk,button) self.Bind(wx.EVT_CLOSE,self.OnClose) self.OpenSecondFrame() def OnClickOk(self,event): self.OpenSecondFrame() def OpenSecondFrame(self): self.second=SecondFrame() self.second.Centre() self.second.MakeModal(True) self.second.Show() def OnClose(self,event): self.Destroy() class SecondFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,"Second Frame",size=(200,200)) panel=wx.Panel(self) button=wx.Button(panel,-1,"Close") self.Bind(wx.EVT_BUTTON,self.OnClickClose,button) def OnClickClose(self,event): self.MakeModal(False) self.Destroy() if __name__ == "__main__": app=App() app.MainLoop()
Lorsque SecondFrame est instanciée à partir du clic sur le bouton, elle apparait bien au premier plan et on ne peut pas interagir avec FirstFrame.
J'instancie aussi SecondFrame dans le __init__ de FirstFrame mais dans ce cas la fenêtre apparait derrière la fenêtre principale.
Alors que c'est la même fonction qui instancie SecondFrame.
C'est peut être lié au fait que dans le premier cas, on appelle d'abord la méthode Show() de SecondFrame puis celle de FirstFrame et que dans le second cas c'est l'inverse.
Toujours est il que je ne sais pas comment faire pour avoir ma deuxième frame devant dans tous les cas, même si je suppose que c'est quelque chose de tout bête...
Merci par avance pour votre aide.
Si vous voyez aussi autre chose dire par rapport à mon script hésitez pas, je suis preneur de tout type de conseil.
Kango
Partager