wxPython --> Comment gérer les boutons qui ouvrent des fenêtres

wxPython --> Comment gérer les boutons qui ouvrent des fenêtres - Python - Programmation

Marsh Posté le 21-07-2004 à 11:37:27    

J'ai un petit soucis qui m'exaspère....
 
Je ne comprends pas comment est ce qu'on fait à faire ouvrir une nouvelle fenetre lorsqu'on clique sur un bouton :
A partir d'un menu, je souhaite ouvrir une nouvelle fenetre en fonction du bouton cliqué.
Puis dans cette nouvelle fenêtre, je veux que les boutons se mettent à jour à l'intérieur tout en effacant les précédants si nécessaire :bounce:

Reply

Marsh Posté le 21-07-2004 à 11:37:27   

Reply

Marsh Posté le 21-07-2004 à 11:47:28    

Ze306 a écrit :

Je ne comprends pas comment est ce qu'on fait à faire ouvrir une nouvelle fenetre lorsqu'on clique sur un bouton :
A partir d'un menu, je souhaite ouvrir une nouvelle fenetre en fonction du bouton cliqué.


ben tu crées les classes de tes fenêtres (dérivées de dialog ou frame comme tu veux, une classe par fenêtre si elles sont très différentes ou alors des options dans le __init__) et tu les construit (appel constructeur) + show quand on clic sur le bouton (ou alors tu les construit/init à l'init de la fenêtre parent et tu les show quand le bouton est cliqué)

Citation :

Puis dans cette nouvelle fenêtre, je veux que les boutons se mettent à jour à l'intérieur tout en effacant les précédants si nécessaire :bounce:


Si c'est une nouvelle fenêtre ya pas de boutons autres que ceux que t'y as mis normalement  :na:


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-07-2004 à 11:50:09    

Pour la deuxième partie, je ne veux pas justement que les boutons de ma nouvelle fenêtre en ouvrent une autre mais simplement que la fenêtre se mette à jour avec les nouvelles options

Reply

Marsh Posté le 21-07-2004 à 11:55:20    

aaaah c'était pas clair, je croyais que tu parlais de la fenêtre popup.
 
Ben pour la mise a jour, il me semble que tu peux changer les callbacks/labels/autres d'un bouton sans aucun problème (ce qui évite de dégager l'ancien bouton pour le remplacer par un nouveau), il faut simplement que tes boutons soient déclarés en objets de la classe (self.button_name) et non en locaux à la fonction dans laquelle ils ont été créés (button_name) de manière à être accessible par les autres fcts et donc modifiables


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-07-2004 à 12:11:03    

Autre question, comme chaque fenêtre est une classe, chacune d'elle se trouve dans un fichier différent.
Est ce qu'il faut faire un import du nom de ce fichier dans chaque fichier ou cette classe va etre appelée?

Reply

Marsh Posté le 21-07-2004 à 12:14:09    

tu peux mettre plusieurs classes dans un même fichier source en python, ca gène pas hein -_-
 
Sinon, oui, il faut faire import nom_du_source (dans lequel est la classe, sans le ".py" ) et ta classe se trouvera a nom_du_source.nom_de_classe


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-07-2004 à 13:23:54    

Personne n'aurait un exemple à me fournir???

Reply

Marsh Posté le 21-07-2004 à 13:41:45    

Code :
  1. #!/bin/env python
  2. # -*- coding: iso-8859-1 -*-
  3. import wx
  4. class MyDialog(wx.Dialog):
  5.     def __init__(self, parent, id, title):
  6.         wx.Dialog.__init__(self, parent, id, title)
  7.         self.parent = parent
  8.         self.Bind(wx.EVT_CLOSE, self.OnClose)
  9.    
  10.     def OnClose(self, event):
  11.         self.parent.OnSupButton(event)       
  12.        
  13. class MyFrame(wx.Frame):
  14.     def __init__(self, parent, ID, title):
  15.         wx.Frame.__init__(self, parent, ID, title, size = (200,100))
  16.        
  17.         self.mybutton = wx.Button(self, wx.NewId(), "Initial" )
  18.        
  19.         self.Bind(wx.EVT_BUTTON, self.OnInitialButton, id = self.mybutton.GetId())
  20.        
  21.         self.dlg = None
  22.        
  23.         self.Show(True)
  24.        
  25.     def OnInitialButton(self, event):
  26.         self.mybutton.SetLabel("\'Sup" )
  27.         self.Bind(wx.EVT_BUTTON, self.OnSupButton, id = self.mybutton.GetId())
  28.         self.dlg = MyDialog(self, -1, "Test Dialog" )
  29.         self.dlg.Show(True)
  30.        
  31.     def OnSupButton(self, event):
  32.         self.mybutton.SetLabel("Initial" )
  33.         self.Bind(wx.EVT_BUTTON, self.OnInitialButton, id = self.mybutton.GetId())
  34.         if self.dlg:
  35.             self.dlg.Destroy()
  36.    
  37. app = wx.PySimpleApp()
  38. frame = MyFrame(None, -1, "Test Frame" )
  39. app.MainLoop()
 

Crée une wx.Frame avec un gros bouton "Initial"
clic sur initial -> devient un bouton "'Sup" et ouvre une boite de dialog
clic sur 'Sup -> fermeture du dialog + retour a bouton "Initial"
fermeture du dialog -> retour au bouton "Initial" sur la frame (suffit d'enlever le self.Bind du dialog pour que ca dégage)


Message édité par masklinn le 04-03-2007 à 18:44:45

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed