Это не столько ответ, сколько незавершенная работа, учитывая, что комментарий просто не взломает его.
Учитывая, что вы не указали, когда и как возникает ошибка, и она где-то происходит в 1000 строк кода, которые мы не можем видеть, прямо сейчас может быть хорошее время для
a minimal, complete and verifiable example (mcve)
{ ссылка }
Как вы, кажется, неохотно чтобы предоставить его, давайте попробуем следующее:
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, title):
super(MyFrame, self).__init__(parent, title=title, size=(620, 665))
splitter = wx.SplitterWindow(self, wx.ID_ANY)
self.MainPanel = NewPanel(splitter)
self.MyNotebook = Nbook(splitter)
splitter.SplitHorizontally(self.MainPanel, self.MyNotebook, sashPosition=210)
self.sb = self.CreateStatusBar(3)
self.MainPanel.Show()
self.Centre()
self.Show()
def setNotebookDisabled(self):
self.MyNotebook.Enabled = False
def PrintSomething(self):
print("Something")
class NewPanel(wx.Panel):
def __init__(self, parent):
super(NewPanel, self).__init__(parent=parent)
testbut = wx.Button(self, -1, "Panel Hit Me")
self.Bind(wx.EVT_BUTTON, self.Disable_Controls)
def Disable_Controls(self, event):
self.GrandParent.MyNotebook.Enabled = not self.GrandParent.MyNotebook.IsEnabled()
class Nbook(wx.Notebook):
def __init__(self, parent):
super(Nbook, self).__init__(parent)
# self.MyNotebook = wx.Notebook(splitter,wx.ID_ANY)
page_one = wx.Panel(self)
page_two = wx.Panel(self)
page_three = wx.Panel(self)
self.AddPage(page_one, "Cable")
self.AddPage(page_two, "Busduct")
self.AddPage(page_three, "Transformer")
if __name__ == "__main__":
app = wx.App()
frame = MyFrame(None, "Test")
app.MainLoop()
Как видите, он работает (см. ниже): ноутбук можно включить / отключить.
![enter image description here](https://i.stack.imgur.com/bFq3f.png)
Итак, можете ли вы заставить это вызвать ошибку или сделать вывод, как ваш код отличается способом или при вызове кода, что выдает ошибку?
Вы можете обнаружить, что GrandParent
не то, что вы думаете! (Я подозреваю, что задействовано splitter
)
Вы можете попробовать:
print("I am",self)
print("My parent is",self.Parent)
print("Granddad is",self.GrandParent)
print("His parent is",self.GrandParent.GetParent())
Еще одна вещь, которую вы можете попробовать при вызове подпрограммы, - это вызвать ее напрямую:
MyFrame.setNotebookDisabled(parent.GetParent())
или вариант для получения подходящего родителя, в зависимости от того, откуда вы его вызываете.
Перед вами.