2014-10-31 104 views
0

我在学习wxpython.I阅读文档,并在与它一起玩之后,现在我创建了一个包含一些面板的小应用程序。在一个面板上,我创建了一个登录页面。 OnSubmit的登录面板,我想切换到另一个面板。我不知道该怎么做。这里是我的代码(ScreenGrab可以帮助你)ScreenGrab might help you: (不需要的功能和类定义这里没有显示):切换到另一个面板wxpython

Toolbook_Demo.py

class ToolbookDemo(wx.Toolbook) : 

    def __init__(self, parent) : 
    print "" 
    wx.Toolbook.__init__(self, parent, wx.ID_ANY, style= 
          wx.BK_DEFAULT 
          #wx.BK_TOP 
          #wx.BK_BOTTOM 
          #wx.BK_LEFT 
          #wx.BK_RIGHT 
         ) 
    # Make an image list using the LBXX images 
    il = wx.ImageList(32, 32) 
    for x in range(4) : 
     imgObj = getattr(images, 'LB%02d' % (x+1)) 
     bmp = imgObj.GetBitmap() 
     il.Add(bmp) 

    self.AssignImageList(il) 
    imageIdGenerator = getNextImageID(il.GetImageCount()) 
    panellogin = userlogin.TabPanel(self) 
    print panellogin.Hide() 
    notebookPageList = [ (userlogin.TabPanel(self), 'Login'), 
         (panelTwo.TabPanel(self), 'Panel Two'), 
         (panelThree.TabPanel(self), 'Panel Three'), 
         (panelOne.TabPanel(self), 'Home')] 
    imID = 0 
    for page, label in notebookPageList : 
     self.AddPage(page, label, imageId=imageIdGenerator.next()) 
     imID += 1 

    # An undocumented method in the official docs : 
    self.ChangeSelection(0) # Select and view this notebook page. 
           # Creates no events - method SetSelection does. 

    self.Bind(wx.EVT_TOOLBOOK_PAGE_CHANGING, self.OnPageChanging) 
    self.Bind(wx.EVT_TOOLBOOK_PAGE_CHANGED, self.OnPageChanged) 

userlogin.py

import wx 
class TabPanel(wx.Panel) : 
    """ This will be [inserted into] the first notebook tab. """ 

    def __init__(self, parent) : 
     wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY) 
     sizer = wx.FlexGridSizer(rows=3, cols=2, hgap=5, vgap=15) 

    # Username 
    self.txt_Username = wx.TextCtrl(self, 1, size=(150, -1)) 
    lbl_Username = wx.StaticText(self, -1, "Username:") 
    sizer.Add(lbl_Username,0, wx.LEFT|wx.TOP| wx.RIGHT, 50) 
    sizer.Add(self.txt_Username,0, wx.TOP| wx.RIGHT, 50) 


    # Password 
    self.txt_Password = wx.TextCtrl(self, 1, size=(150, -1), style=wx.TE_PASSWORD) 
    lbl_Password = wx.StaticText(self, -1, "Password:") 
    sizer.Add(lbl_Password,0, wx.LEFT|wx.RIGHT, 50) 
    sizer.Add(self.txt_Password,0, wx.RIGHT, 50) 

    # Submit button 
    btn_Process = wx.Button(self, -1, "&Login") 
    self.Bind(wx.EVT_BUTTON, self.OnSubmit, btn_Process) 
    sizer.Add(btn_Process,0, wx.LEFT, 50) 

    self.SetSizer(sizer) 

def OnSubmit(self, event): 
    UserText = self.txt_Username.GetValue() 
    PasswordText = self.txt_Password.GetValue() 
    if authentcated(UserText, PasswordText): 
     #Switch to another panel 
     #Hide login panel until current session expires 
     #Show another panels only 

回答

1

我不认为你想使用笔记本型小部件中的面板登录,它将带你到下一个选项卡。用户可以在没有登录的情况下点击下一个选项卡。我猜你希望第一个选项卡的面板更改为其他内容。最简单的方法是将其称为“隐藏方法”并显示其他面板。幸运的是,这很容易做到。以下是一个使用菜单在面板之间切换的示例:

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

您可以使用相同的逻辑替换工具箱中的面板。

+0

感谢您的回复。你是对的。但是,我无法切换到另一个页面,点击第一个面板中显示的登录按钮 – trex 2014-11-03 06:57:33