2013-08-18 47 views
2

我正在写一个GUI,我想我的主界面屏幕前做一个登录界面,但我不能找出正确的方式做到这一点wxPython的登录功能

开始我尝试构建它像这样:

class GUI(wx.Frame): 
    #GUI 
    def __init__(self, parent, id, title): 
     state = 1 
     if state ==1: 
      #Login screen code 
     elif state == 2: 
      #Main Screen code 

但没有工作没有弹出

所以我试图创建一个主窗口前弹出一个完全不同的小窗口,但不能得到那个工作

所以我的问题是我怎样才能让我的GUI的登录屏幕正确

谢谢你!

+0

'__init__'只运行一次,因为每次启动'GUI'国家将'1'不管'GUI'将始终显示相同的内容。向我们展示更多的代码,当你创建你的类时更符合逻辑。例如,如果你重新使用这个类,使'state'成为一个参数。也许把'状态#2'放在一个函数或其他东西中? – Torxed

+0

它在登录屏幕上按OK按钮时变为状态2,但它甚至没有显示登录屏幕 – Serial

+0

如何实例化'GUI',甚至在任何地方调用'wx.Frame .__ init__'? 请您发布完整的代码,因为这段代码对我们来说毫无用处(没有冒犯,但它太模糊)。这就像是说“我与我的热狗有问题”,而我们不知道你是素食主义者还是有热狗。或者,如果你只是想念你的热狗包:/ – Torxed

回答

0

的东西在这里就是我打开一推出首选项窗口为GooeyPi:我PyInstaller GUI前端。这可以很容易地适应有一个密码对话框或框架。我分成两个功能:检查用户是否有设置偏好,并打开偏好窗口。这允许他们稍后改变偏好。我使用ShowModal来防止用户在设置之前使用该应用程序。

class GooeyPi(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     super(GooeyPi, self).__init__(*args, **kwargs) 
     self.InitUI() 
     self.SetSize((460,350)) 
     self.SetTitle('GooeyPi - PyInstaller GUI') 
     self.Show() 
     self.CheckFirstRun() # Checks for first run here. 

    ..... 

    def CheckFirstRun(self): 
     config = controller.getConfig() 
     if config['pyidir'] == '': 
      ... 
      self.OnPreferences(None) 
    .... 

    def OnPreferences(self, e): 
     prefdlg = pref.Preferences(None, title='Edit Preferneces') 
     prefdlg.ShowModal() 
     prefdlg.Destroy() 

和pref.Preferences是definied在一个单独的模块:

class Preferences(wx.Dialog): 
    def __init__(self, *args, **kw): 
     super(Preferences, self).__init__(*args, **kw) 
     self.InitUI() 
     self.SetSize((380,290)) 
     self.SetTitle("Preferences") 

    def InitUI(self): 
     you_get_the_idea... 
+0

这是有帮助的,我做的是创建登录并显示它首先然后主窗口被称为按钮推事件谢谢你虽然生病接受你的回答:) – Serial

+0

另一个好方法! – pedram

0

我推荐使用内置的wx.PasswordEntryDialog,并根据密码对话框中的条目显示或隐藏主窗口。你甚至可以把wx.PasswordEntryDialog放在while循环中。像(未经测试)

self.Hide() 
password = "a passphrase" 
entered_password = None 
while entered_password != password: 
    dialog = wx.PasswordEntryDialog(self, "Enter the password", "Please enter the password") 
    ret_value = dialog.ShowModal() 
    if ret_value == wx.ID_OK: 
     entered_password = dialog.GetValue() 
    else: 
     self.Close(True) 
    dialog.Destroy() 
# self.Show()