Проблема с классами в Python - PullRequest
1 голос
/ 10 апреля 2010

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

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

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

РЕДАКТИРОВАТЬ: Извините, ребята не показывались / скрывались, а были включены / отключены.

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")

Ответы [ 2 ]

6 голосов
/ 10 апреля 2010

Это больше похоже на вопрос 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.
5 голосов
/ 10 апреля 2010

На вкладках '__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()

и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...