2010-04-10 2 views
1

Хорошо, ребята, я действительно новичок в python (и сам программирование), так жаль мое невежество, но мне действительно нужно было спросить об этом. Итак, я делаю проект wxPython, где я добавил несколько вкладок для ноутбука (каждая вкладка ноутбука = класс), и есть одна вкладка, где я добавил флажок (на вкладке, можно вызвать его, например, Tab1), и что Я хочу, чтобы когда кто-то его проверял, кнопка, существующая на другой вкладке (класс, вызываемый, например, tab2), скрывается там, где ранее она показывалась.Проблема с классами в Python

Ну, я вижу, что выполнить это не сложно, но моя проблема заключается в классах (tab1 и tab2, в этом примере). Я пытался понять это, ища, но я думаю, что я не искал достаточно сильно, потому что я просто не могу понять это правильно. Если бы они были в одном классе, у меня не было бы проблемы, но, поскольку они бывают в разных классах, им предстоит огромная борьба с этим.

Надеюсь, кто-то может мне помочь, и еще жаль мое невежество.

EDIT: Извините, ребята не показывались/скрыты, а были включены/отключены.

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

Это очень сложно понять вашу проблему. Не могли бы вы рассказать? В чем проблема с классами? Образцы кода также могут быть полезны. – jathanism

+0

Отредактировано кодом – dpswt

ответ

5

В ушках __init__ сохраните parent задание (ноутбук):

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

Затем self.parent.GetPage(x) позволяет получить доступ к x ей странице (т.е. закладка) ноутбука из любых другая страница (вкладка). Таким образом, вместо self.jaddbutton.Disable() и т.д., как вы будете использовать, например .:

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

и так далее.

+0

Эй, спасибо большое! Вы решили буквально мою проблему! Еще раз спасибо за сотрудничество! – dpswt

+0

@ Франсиско, всегда рад помочь! –

+0

@Francisco: добро пожаловать в SO. Обычно полезно поднимать полезные ответы (стрелка вверх по стрелке). – bernie

6

Это скорее похоже на вопрос wxpython, чем вопрос классов. Как правило, в python tab1 понадобится дескриптор для tab2, чтобы скрыть кнопку в tab2. Или ему понадобится дескриптор некоторого общего ресурса, например родительского класса или класса общей модели, который позволит tab1 влиять на настройки в tab2 (например, на скрытие кнопки). PyQt предоставляет систему событий, позволяющую общаться между классами, которые могут не обязательно содержать ручки друг к другу. Каков общий «принятый» способ общения в wxpython?

Вот довольно абстрактный пример общего родительского решения.

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

Спасибо, человек, которого вы мне очень помогли! – dpswt

+0

@Francisco, ваш прием! – 2010-04-11 00:23:05

Смежные вопросы