Python中的类有问题

2024-09-27 00:21:27 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,伙计们,我对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")

Tags: self示例initdef笔记本tab1选项卡class
2条回答

在选项卡__init__中,保存parent引用(笔记本):

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

然后,self.parent.GetPage(x)允许您从任何其他页面(tab)访问笔记本的第x-第页(即tab)。因此,代替self.jaddbutton.Disable()等,您将使用,例如:

^{pr2}$

等等。在

这听起来更像是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.

相关问题 更多 >

    热门问题