为什么“GetSelection()”将索引返回到第一页,而不是“init”和“new_panel”中最后创建的索引?它确实在“点击”方法中返回正确的索引。
输出应该是 0 0 1 1 2 2,但我的是 0 0 0 0 0 0。
在 ArchLinux 中运行最新版本的 python 和 wxpython。
奥詹·佩特森
#!/usr/bin/python
#12_aui_notebook1.py
import wx
import wx.lib.inspection
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
self.nb = wx.aui.AuiNotebook(self)
self.new_panel('Page 1')
print self.nb.GetSelection()
self.new_panel('Page 2')
print self.nb.GetSelection()
self.new_panel('Page 3')
print self.nb.GetSelection()
def new_panel(self, nm):
pnl = wx.Panel(self)
pnl.identifierTag = nm
self.nb.AddPage(pnl, nm)
self.sizer = wx.BoxSizer()
self.sizer.Add(self.nb, 1, wx.EXPAND)
self.SetSizer(self.sizer)
pnl.SetFocus() # Have focused the last panel.
print self.nb.GetSelection()
pnl.Bind(wx.EVT_LEFT_DOWN, self.click)
def click(self, event):
print 'Mouse click'
print self.nb.GetSelection()
print self.nb.GetPageText(self.nb.GetSelection())
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, '12_aui_notebook1.py')
frame.Show()
self.SetTopWindow(frame)
return 1
if __name__ == "__main__":
app = MyApp(0)
# wx.lib.inspection.InspectionTool().Show()
app.MainLoop()
最佳答案
解决方案非常简单。问题似乎是创建新页面没有生成页面更改事件。 解决办法是:
self.nb.AddPage(pnl, nm, select=True)
添加“select=True”将触发页面更改事件。这样问题就解决了。
另一个解决方案是添加此行:
self.nb.SetSelection(self.nb.GetPageCount()-1)
他们都做同样的事情。触发最后添加的页面的页面更改事件。
def new_panel(self, nm):
pnl = wx.Panel(self)
pnl.identifierTag = nm
self.nb.AddPage(pnl, nm, select=True)
self.sizer = wx.BoxSizer()
self.sizer.Add(self.nb, 1, wx.EXPAND)
self.SetSizer(self.sizer)
#self.nb.SetSelection(self.nb.GetPageCount()-1)
pnl.SetFocus() # Have focused the last panel.
print self.nb.GetSelection()
关于python - wxPython auinotebook.GetSelection() 返回第一页的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/647906/