wxpython下如何实现先显示对话框再显示主框体呢

wxpython下如何实现先显示对话框再显示主框体呢

正在编写一个程序,想首先弹出对话框,正确输入用户名和密码后,对话框消除再显示主框体.对话框和主框体的实现代码我已初步完成,但这两个frame之间的关系和切换未搞定,麻烦哪位高人指点一二,万分感谢!
对话框可以单独显示啊。把它的parent设置为None,提前显示就行了。
初步实现了一个框架,麻烦大家斧正,万分感谢limodou!

[Copy to clipboard] [ - ]
CODE:
# --*-- encoding: UTF-8 --*--

import wx
import sys, glob

class LoginDialog(wx.Dialog):
    def __init__(self, parent, id = -1):
        wx.Dialog.__init__(self, parent, id, u'MIS系统')
        
        sampleList = []
        
        f = file('crm.txt')
        while True:
            readcrm = f.readline()
            if len(readcrm) == 0:
                break           
            sampleList.append(readcrm)
        f.close()
            

        self.ctrl_username = wx.ComboBox(self, -1, "guest", wx.DefaultPosition, wx.DefaultSize, sampleList, wx.CB_DROPDOWN)
        self.ctrl_passwd = wx.TextCtrl(self, -1, style = wx.TE_PASSWORD)
        self.ctrl_login = wx.Button(self, wx.ID_OK, u'登录')
        self.ctrl_login.SetDefault()
        self.ctrl_cancel = wx.Button(self, wx.ID_CANCEL, u'取消')
        self.ctrl_register = wx.Button(self, -1, u'注册')

        self._layout()

    def _layout(self):
        sizer = wx.BoxSizer(wx.VERTICAL)

        b = wx.StaticBoxSizer(wx.StaticBox(self, -1, u'登录'), wx.VERTICAL)
        b.Add(wx.StaticText(self, -1, u'请输入用户名和密码\n' u'(普通查询请用guest登录,密码: 000000)'), 0, wx.ALL, 3)
        grid = wx.FlexGridSizer(2, 0, 3, 3)
        grid.AddGrowableCol(1)
        grid.Add(wx.StaticText(self, -1, u'用户名:'))
        grid.Add(self.ctrl_username, 0, wx.GROW)
        grid.Add(wx.StaticText(self, -1, u'密码:'))
        grid.Add(self.ctrl_passwd, 0, wx.GROW)
        b.Add(grid, 0, wx.GROW|wx.ALL, 3)
        sizer.Add(b, 0, wx.GROW|wx.ALL, 3)

        h = wx.BoxSizer(wx.HORIZONTAL)
        h.Add(self.ctrl_login, 0, wx.ALL, 3)
        h.Add(self.ctrl_cancel, 0, wx.ALL, 3)
        h.Add((0, 0), 1)
        h.Add(self.ctrl_register, 0, wx.ALL, 3)
        sizer.Add(h, 0, wx.GROW)

        self.SetAutoLayout(True)
        self.SetSizerAndFit(sizer)
        
    def GetValue(self):
        return self.ctrl_passwd.GetValue()


class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, u"主窗体", size = (800,600))
        il = wx.ImageList(32, 32, True)
        for name in glob.glob("icon??.png"):
            bmp = wx.Bitmap(name, wx.BITMAP_TYPE_PNG)
            il_max = il.Add(bmp)
        self.list = wx.ListCtrl(self, -1, style = wx.LC_ICON | wx.LC_AUTOARRANGE)
        self.list.AssignImageList(il, wx.IMAGE_LIST_NORMAL)
        for x in range(25):
            img = x % (il_max+1)
            self.list.InsertImageStringItem(x, "This is item %02d" %x, img)



if __name__ == '__main__':
    global x
    app = wx.PySimpleApp()
    while True:
        logindlg = LoginDialog(None)
        answer = logindlg.ShowModal()
        if answer == wx.ID_CANCEL:
            x = False
            break
        if answer == wx.ID_OK:
            password = logindlg.GetValue()
            if password == '1234':
                x = True
                break
            else:
                wx.MessageBox(u"密码错误!", u"提示信息", wx.OK | wx.ICON_INFORMATION)
                logindlg.Destroy()
    logindlg.Destroy()
    if x == True:
        frame = MainFrame()
        frame.Show()
    else:
        sys.exit()
    app.MainLoop()

不错。LoginDialog你确信只是在启动时用的话,可以不用有parent参数,在初始化wx.Dialog时直接赋一个None就行了。
先hide一个不行的吗?我不清楚哦,随便问问
能实现lz的要求就可以。