2010-11-24 8 views
3

私はコンテンツを表示する前にログインボックスを表示するwxPython(絶対初心者)で小さなアプリケーションを構築しようとしています。私はフレーム内にフレキシグリッドがあるパネルをフレーム内に作成し、ログインフォームを内部に配置しましたが、表示されません。私がアプリケーションを起動すると、ログインフォームは見えなくなります。アプリケーションのサイズを変更すると、ログインボックスに表示されます。どんな考え?ここに私のコードは、これまでのところです:wxPythonはログインボックスを表示します

import wx 

class AP_App(wx.App): 
    def OnInit(self): 
     frame = AP_MainFrame("Test application", (0, 0), (650, 350)) 
     frame.Show() 
     self.SetTopWindow(frame) 

     loginPanel = AP_LoginPanel(frame) 
     self.Bind(wx.EVT_CLOSE, self.OnCloseWindow) 
     return True 

    def OnCloseWindow(self, event): 
     self.Destroy() 


class AP_MainFrame(wx.Frame): 
    def __init__(self, title, pos, size): 
     wx.Frame.__init__(self, None, -1, title, pos, size) 
     self.CreateStatusBar() 


class AP_LoginPanel(wx.Panel): 
    def __init__(self, frame): 
     self.panel = wx.Panel(frame) 
     self.frame = frame 

     self.frame.SetStatusText("Authentification required!") 
     self.showLoginBox() 

    def showLoginBox(self): #Create the sizer 
     sizer = wx.FlexGridSizer(rows = 3, cols = 2, hgap = 5, vgap = 15) 

     # Username 
     self.txt_Username = wx.TextCtrl(self.panel, 1, size = (150, -1)) 
     lbl_Username = wx.StaticText(self.panel, -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.panel, 1, size=(150, -1), style=wx.TE_PASSWORD) 
     lbl_Password = wx.StaticText(self.panel, -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.panel, -1, "&Login") 
     self.panel.Bind(wx.EVT_BUTTON, self.OnSubmit, btn_Process) 
     sizer.Add(btn_Process,0, wx.LEFT, 50) 

     self.panel.SetSizer(sizer) 

    def OnSubmit(self, event): 
     UserText = self.txt_Username.GetValue() 
     PasswordText = self.txt_Password.GetValue() 


if __name__ == '__main__': 
    app = AP_App() 
    app.MainLoop() 

答えて

4

私はちょうど私があまりにも早くframe.Show()を呼んでいるを発見しました。 :)

+0

なぜ違いがあるのか​​ちょうど注意してください:フレームは、フレームの 'EVT_SIZE'ハンドラ内のコンテンツのレイアウトを管理します(サイザー、または1つの子をフレームに埋め込むようにサイズを変更します)。 'Show'を呼び出すと、最初のサイズイベントが取得されますが、その時点でサイズを変更するコンテンツはありません。その後、パネルを追加すると小さなデフォルトサイズで開始され、フレームが別のサイズイベントを取得するまでそのまま残ります。 – RobinDunn

関連する問題