Рубрики
Без рубрики

WXPYPHON: Как переключиться между панелями

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Каждая пару месяцев, я увижу, что кто-то спрашивает, как переключаться между двумя видами или панелями в приложении WXPYPHON, на котором они работают. Поскольку это такой общий вопрос, и потому что я спросил на прошлой неделе на канале WXPYPHON на IRC, я записал быстрый скрипт, который показывает, как это сделано. Обратите внимание, что в большинстве случаев пользователь, вероятно, найдет одно из множества виджетов ноутбуков, чтобы быть более чем достаточным для

В этом примере мы будем использовать меню для переключения между двумя панелями. Первая панель будет иметь только текстовое управление на нем, а вторая панель будет иметь виджет сетки.

import wx
import wx.grid as gridlib
    
########################################################################
class PanelOne(wx.Panel):
    """"""

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

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

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent=parent)
        
        grid = gridlib.Grid(self)
        grid.CreateGrid(25,12)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(grid, 0, wx.EXPAND)
        self.SetSizer(sizer)
        
########################################################################
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 
                          "Panel Switcher Tutorial")
 
        self.panel_one = PanelOne(self)
        self.panel_two = PanelTwo(self)
        self.panel_two.Hide()
        
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.panel_one, 1, wx.EXPAND)
        self.sizer.Add(self.panel_two, 1, wx.EXPAND)
        self.SetSizer(self.sizer)
        
        
        menubar = wx.MenuBar()
        fileMenu = wx.Menu()
        switch_panels_menu_item = fileMenu.Append(wx.ID_ANY, 
                                                  "Switch Panels", 
                                                  "Some text")
        self.Bind(wx.EVT_MENU, self.onSwitchPanels, 
                  switch_panels_menu_item)
        menubar.Append(fileMenu, '&File')
        self.SetMenuBar(menubar)
        
    #----------------------------------------------------------------------
    def onSwitchPanels(self, event):
        """"""
        if self.panel_one.IsShown():
            self.SetTitle("Panel Two Showing")
            self.panel_one.Hide()
            self.panel_two.Show()
        else:
            self.SetTitle("Panel One Showing")
            self.panel_one.Show()
            self.panel_two.Hide()
        self.Layout()
        
 
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Единственный код, который мы заботимся о, находится в onswitchpanels обработчик события. Здесь мы используем условное, чтобы проверить, какая панель отображается, а затем скрыть текущий и показать другое. Мы также устанавливаем заголовок кадра, чтобы сделать его очевидным, какая панель которой. Нам также необходимо вызвать метод макета кадра (), чтобы заставить панели видимыми. В противном случае вы можете увидеть, что некоторые странные визуальные аномалии, как ничто, не показывая в кадре, если вы не изменяете его незначительно.

Теперь вы знаете, как переключать панели тоже. Если вы планируете делать много визуальных работ, таких как добавление или удаление виджетов, то вы можете посмотреть в методы Freeze и Thout, а затем использовать макет. Они помогают скрыть мерцание, которое можно увидеть, когда вы измените детей панели.