2

我正在编写一个 GUI,我试图在我的主 GUI 屏幕之前制作一个登录屏幕,但我想不出正确的方法来做到这一点

首先,我尝试像这样构造它:

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 制作登录屏幕

谢谢你!!

4

2 回答 2

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()
于 2013-08-18T21:41:16.233 回答
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 在单独的模块中定义:

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...
于 2013-08-19T16:56:59.357 回答