2014-10-31 160 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