我发现实现这一点并不困难,但我的问题是类(本例中为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")
答案 0 :(得分: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.
答案 1 :(得分: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()
等等。