2010-04-10 6 views
1

Ok les gars, je suis vraiment nouveau sur Python (et la programmation lui-même) donc désolé pour mon ignorance, mais j'avais vraiment besoin de demander cela. Donc je fais un projet wxPython où j'ai ajouté plusieurs onglets pour un cahier (chaque onglet du cahier = une classe) et il y a un onglet où j'ai ajouté une case à cocher (dans un onglet, appelons par exemple Tab1), et Je veux, c'est que quand quelqu'un le vérifie, un bouton qui existe dans un autre onglet (classe appelée par exemple tab2) devient caché là où il était précédemment montré. Eh bien, je vois que ce n'est pas difficile à accomplir, mais mon problème est les classes (tab1 et tab2, dans cet exemple). J'ai essayé de le comprendre en cherchant mais je suppose que je ne cherche pas assez dur parce que je ne peux juste pas le faire correctement. S'ils étaient dans la même classe, je n'aurais pas de problème, mais comme ils sont dans des classes différentes, j'ai un énorme problème avec ça.Problème avec les classes en Python

J'espère que quelqu'un peut m'aider, et désolé pour mon ignorance une fois de plus.

EDIT: Désolé les gars n'étaient pas montrés/cachés, mais plutôt être activés/désactivés.

class Tab2(wx.Panel): 
    def __init__(self, parent): 
    ..... 
     self.jaddbutton = wx.Button(self,-1, label ="Button", size = (160,24)) 
     self.jaddbutton.Bind(wx.EVT_BUTTON, self.jaddbuttonclick, self.jaddbutton) 
    def jaddbuttonclick(self, event): 
     .... 
class Tab1(wx.Panel): 
    def __init__(self, parent): 
     self.jdcheck = wx.CheckBox(self, -1, 'Disable') 
     self.jdcheck.Bind(wx.EVT_CHECKBOX, self.checkoptions, self.jdcheck) 
    def checkoptions(self,event): 
     checkboxval = self.jdcheck.GetValue() 
     if checkboxval == False: 
      self.jaddbutton.Disable() # This is what I want to do but it is on the other class 

     else: 
      self.jaddbutton.Enable() # Same as above 

class TextFrame(wx.Frame): 
    def __init__(self): 
     p = wx.Panel(self) 
     self.nb = wx.Notebook(p, size = (750, 332)) 
     #Tabs 
     tab1 = Tab1(self.nb) 
     tab2 = Tab2(self.nb) 
     self.nb.AddPage(tab1, "ssomething") 
     self.nb.AddPage(tab2, "somethingr") 
+1

Il est vraiment difficile de comprendre votre problème. Pouvez-vous élaborer s'il vous plaît? Quel est le problème que vous rencontrez avec les cours? Les exemples de code peuvent également être utiles. – jathanism

+0

Édité avec le code – dpswt

Répondre

5

Dans les onglets __init__, sauf la référence parent (le portable):

class Tab1(wx.Panel): 
    def __init__(self, parent): 
     self.parent = parent 
     ...etc, etc... 

Ensuite, self.parent.GetPage(x) vous permet d'accéder à la x la page -ème (c.-à-onglet) de l'ordinateur portable de tout autre page (onglet). Ainsi, au lieu de self.jaddbutton.Disable() etc, vous seriez en utilisant, par exemple .:

othertab = self.parent.GetPage(1) 
othertab.jaddbutton.Disable() 

et ainsi de suite.

+0

Hé, l'homme merci beaucoup! Vous avez résolu mon problème littéralement! Merci encore pour votre coopération! – dpswt

+0

@Francisco, toujours heureux d'être utile! –

+0

@Francisco: bienvenue à SO. Il est d'usage d'améliorer les réponses utiles (cliquez sur la flèche orientée vers le haut). – bernie

6

Cela ressemble plus à une question wxpython qu'à une question de classe. Normalement, en python, tab1 aurait besoin d'un handle pour tab2 afin de cacher le bouton dans tab2. Ou il aurait besoin d'un handle pour une ressource partagée, comme une classe parente ou une classe de modèle partagée, qui permettrait à tab1 d'affecter les paramètres de tab2 (comme le masquage d'un bouton). PyQt fournit un système d'événements pour permettre la communication entre les classes qui ne peuvent pas nécessairement contenir des poignées les unes aux autres. Quel est le moyen commun "accepté" de communiquer dans wxpython?

Voici un exemple assez abstrait de la solution parente partagée.

class Parent(object): 

    def create_tabs(): 
     self.tab1 = Tab1(self) 
     self.tab2 = Tab2(self) 

    def hide_tab2_button(): 
     self.tab2.hide_button() 


class Tab1(object): 
    def __init__(self, parent): 
     self.parent = parent 

    def on_checkbox_checked(self): 
     self.parent.hide_tab2_button() 


class Tab2(object): 
    def __init__(self, parent): 
     self.parent = parent 

    def hide_button(self): 
     self.button.hide() # Or whatever the wxpython command is to hide a button. 
+0

Merci l'homme que vous m'a aidé beaucoup! – dpswt

+0

@Francisco, votre bienvenue! –