繁体   English   中英

处理对话框的最pythonic方式?

[英]Most pythonic way to handle dialogboxes?

我在wxpython应用程序中做了一个弹出密码框的功能。 出现在dialogs.py中的代码如下所示:

def password_dialog(self, password):
    # Only ask for password if it actually exist
    if password == 'False':
        return True

    question = 'Put in password:'
    dialog = wx.PasswordEntryDialog(self, question, 'Password...')
    if dialog.ShowModal() == wx.ID_OK:
        if dialog.GetValue() == password:
            dialog.Destroy()
            return True
        else:
            dialog.Destroy()
            __wrong_pass()
            raise WrongPassword
    else:
        dialog.Destroy()
        raise CancelDialog

例外在同一文件中:

class WrongPassword(Exception):
    pass

class CancelDialog(Exception):
    pass   

在我的主程序中,然后有一些看起来像这样的方法:

def on_sort_songs(self, event): 
    """Renumbering the database and sort in artist and title order"""
    # Check for password first
    try:
        dialogs.password_dialog(self, opts.generic['password'])
    except dialogs.CancelDialog:
        return
    except dialogs.WrongPassword:
        return

    # Sort database and repopulate GUI
    self.jbox.sort_songs()
    self.populate_songlist()

工作正常。 但这似乎不是一种处理密码对话框的非常好用的Python方式。 还是?

我不认为您的对话功能在这种情况下应该引发异常。 根据验证是否通过,让它返回True或False。 然后,您需要做的就是:

validated = dialogs.password_dialog(self, opts.generic['password'])
if validated:
    print "Yay"
else:
    print "Boo"

仅对于您要区分的其他随机失败情况才需要例外,例如“身份验证服务器已关闭”

我认为在这种情况下返回True或False很好的另一个原因是因为您可以使用可以换出的模块化身份验证方法。 例如django如何使用返回布尔值的单个is_authenticated()方法。 最终用途只需要担心其是否已通过身份验证。 它没有特别引发什么异常,例如关闭对话框。 有些情况下甚至可能不使用对话框。可能是命令行,也可能是Web界面等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM