1

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

2 に答える 2

1

解決策は非常に簡単でした。問題は、新しいページを作成してもページ変更イベントが生成されなかったことです。解決策は次のとおりです。

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()
于 2009-03-16T07:27:45.817 に答える
0

私はあなたの例を実行し、正しい出力を得ました:

0
0
1
1
2
2

wxPython の最新の Windows リリースを使用しています

于 2009-03-15T20:50:15.880 に答える