wxPython auinotebook.GetSelection()将索引返回到第一页

wxPython auinotebook.GetSelection()将索引返回到第一页,python,wxpython,wxwidgets,Python,Wxpython,Wxwidgets,为什么“GetSelection()”将索引返回到第一页,而不是在“init”和“new_panel”中创建的最后一页?它确实会在“click”方法中返回正确的索引 输出应该是0 1 2 2,但我的是0 0 0 0 在ArchLinux中运行最新版本的python和wxpython 伊尔詹·佩特森 #!/usr/bin/python #12_aui_notebook1.py import wx import wx.lib.inspection class MyFrame(wx.Frame)

为什么“GetSelection()”将索引返回到第一页,而不是在“init”和“new_panel”中创建的最后一页?它确实会在“click”方法中返回正确的索引

输出应该是0 1 2 2,但我的是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()

我运行了您的示例,得到了正确的输出:

0
0
1
1
2
2

我使用的是最新windows版本的wxPython

我运行了您的示例并获得了正确的输出:

0
0
1
1
2
2

我使用的是最新的windows版本的wxPython

解决方案非常简单。问题似乎是创建新页面并没有生成页面更改事件。 解决办法是:

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

解决办法很简单。问题似乎是创建新页面并没有生成页面更改事件。 解决办法是:

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

真奇怪,我得了0分。在linux平台上运行它。那么我可能没有做错什么?真奇怪,我得到了0。在linux平台上运行它。那么我可能没有做错什么?