воскресенье, 22 июля 2012 г.

wxPython: Как программно открыть другую вкладку wx.Notebook (Перевод)


Я тут встретил в wxPython users group вопрос о том, как можно программно изменить открытую вкладку в wx.Notebook. Вот код, который у меня работает:

import random
import wx
 
########################################################################
class TabPanel(wx.Panel):
    #----------------------------------------------------------------------
    def __init__(self, parent, page):
        """page - это номер панели, НА которую надо будет переключиться при нажатии кнопки"""
        wx.Panel.__init__(self, parent=parent)
        self.page = page
 
        colors = ["red", "blue", "gray", "yellow", "green"]
        self.SetBackgroundColour(random.choice(colors))
 
        btn = wx.Button(self, label="Change Selection")
        btn.Bind(wx.EVT_BUTTON, self.onChangeSelection)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(btn, 0, wx.ALL, 10)
        self.SetSizer(sizer)
 
    #----------------------------------------------------------------------
    def onChangeSelection(self, event):
        """
        Изменить вкладку!
        """
        notebook = self.GetParent()
        notebook.SetSelection(self.page)
 
########################################################################
class DemoFrame(wx.Frame):
    """
    Фрейм, содержащий остальные виджеты
    """
 
    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""        
        wx.Frame.__init__(self, None, wx.ID_ANY, 
                          "Notebook Tutorial",
                          size=(600,400)
                          )
        panel = wx.Panel(self)
 
        notebook = wx.Notebook(panel)
        tabOne = TabPanel(notebook, 1)
        notebook.AddPage(tabOne, "Tab 1")
 
        tabTwo = TabPanel(notebook, 0)
        notebook.AddPage(tabTwo, "Tab 2")
 
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(notebook, 1, wx.ALL|wx.EXPAND, 5)
        panel.SetSizer(sizer)
        self.Layout()
 
        self.Show()
 
#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = DemoFrame()
    app.MainLoop()
Как видите, главное, что Вам нужно знать - это методы SetSelection (или ChangeSelection) для изменения вкладки виджета Notebook. Этот код работает на Windows 7 с Python 2.7.3 и wxPython 2.9.3.1 (Classic). Смотрите так же дискуссию на Nabble.

Комментариев нет:

Отправить комментарий