0

私はwxpythonを使用してこのGUIツールを作成しています。そのために、私はメニューといくつかのメニュー項目を持っています。これで、特定のメニュー項目をクリックすると、メニュー項目のクリックを処理するイベントのコードを記述しました。新しいシート(パネルとその中のlistctrl)を作成し、作成済みのwx.Notebookオブジェクトにページを追加します。ここで、メニュー項目を次々にクリックすると、連続して開いたタブ(つまり、その時点でユーザーに表示されるタブ)をアクティブにしたいのですが、実際に発生するのは、最初に開いたタブがアクティブなままであるもの。これをどのように達成できるか教えていただけますか?

イベントハンドラのコードは次のとおりです。

# code for one menu-item click - 
def displayApps(self, event):
    self.appsTab = TabPanel(self.notebook)
    self.notebook.AddPage(self.appsTab, "List of applications running on each node") 
    self.apps = wx.ListBox(self.appsTab, 12, (10, 40),(450,150), self.appslist, wx.LB_SINGLE) #creating the listbox inside the panel in the tab

# code for another menu-item click - 
def displayFreeNodes(self, event):
    #displays the list of free nodes in panel1
    self.freenodesTab = TabPanel(self.notebook)
    self.notebook.AddPage(self.freenodesTab, "List of free nodes in the cluster")
    self.freenodes = wx.ListBox(self.freenodesTab, 13, (10,40),(200,130), self.freenodeslist, wx.LB_SINGLE)
    #self.boxsizer1.Add(self.freenodes, 1)
4

2 に答える 2

1

ここSOで実際に非常に活発に活動しているMikeDriscollが、のページを変更する方法を示すブログ投稿wx.Notebookを書いています。このメソッドを使用したいようですwx.Notebook.SetSelection()。残念ながら、このメソッドのドキュメントでは、この機能が明確にされていません。

SetSelection()引数としてインデックスを使用するため、適切なインデックスを計算する必要があります。新しい各ページがの最後に追加されると仮定すると、この関数を使用して、ページの総数、つまり最終ページのインデックスを計算wx.Notebookできるはずです。wx.Notebook.GetPageCount()コードは次のようになります。

def displayFreeNodes(self, event):

    [...]

    index = self.notebook.GetPageCount() - 1 #get the index of the final page.
    self.notebook.SetSelection(index) #set the selection to the final page

編集
私は質問を少し誤解したようです。OPは、ユーザーがオブジェクト内の適切なアイテムをクリックしたことに基づいて、開くタブを選択できるようにしたいと考えていwx.ListCtrlます。

これを行う最も簡単な方法は、アイテムが常にwx.ListCtrlと同じ順序で表示されるようにすることwx.Notebookです。つまり、リストのインデックス0をクリックすると、ノートブックのインデックス0が開き、1をクリックするとタブ1が開きます。その場合、それをキャッチwx.EVT_LIST_ITEM_SELECTEDして、次のようなメソッドにバインドする必要があります。

def handleListItemClick(event):
    index = event.GetIndex() #this will return the index of the listctrl item that was clicked
    self.notebook.SetSelection(index) #this will open that same index in notebook
于 2012-09-12T13:54:47.563 に答える
0

SetSelectionまたはChangeSelectionを使用します。これは、私が作成した楽しい小さなスクリプトで、その方法を示しています(注:[次のページ]メニュー項目を使用する前に、いくつかのページを追加する必要があります)。

import random
import wx

########################################################################
class NewPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        color = random.choice(["red", "blue", "green", "yellow"])
        self.SetBackgroundColour(color)

########################################################################
class MyNotebook(wx.Notebook):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Notebook.__init__(self, parent)

########################################################################
class MyFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self,None, title="NoteBooks!")
        self.page_num = 1

        panel = wx.Panel(self)
        self.notebook = MyNotebook(panel)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.notebook, 1, wx.EXPAND)
        panel.SetSizer(sizer)
        self.createMenu()

        self.Layout()
        self.Show()

    #----------------------------------------------------------------------
    def createMenu(self):
        """"""
        menuBar = wx.MenuBar()
        fileMenu = wx.Menu()

        addPageItem = fileMenu.Append(wx.NewId(), "Add Page",
                                      "Adds new page")
        nextPageItem = fileMenu.Append(wx.NewId(), "Next Page",
                                       "Goes to next page")

        menuBar.Append(fileMenu, "&File")
        self.Bind(wx.EVT_MENU, self.onAdd, addPageItem)
        self.Bind(wx.EVT_MENU, self.onNext, nextPageItem)
        self.SetMenuBar(menuBar)

    #----------------------------------------------------------------------
    def onAdd(self, event):
        """"""
        new_page = NewPanel(self.notebook)
        self.notebook.AddPage(new_page, "Page %s" % self.page_num)
        self.page_num += 1

    #----------------------------------------------------------------------
    def onNext(self, event):
        """"""
        number_of_pages = self.notebook.GetPageCount()
        page = self.notebook.GetSelection()+1
        if page < number_of_pages:
            self.notebook.ChangeSelection(page)

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()
于 2012-09-12T14:16:45.667 に答える