你的循环只是不断地创建消息对话框而不是让用户做一些事情。您需要删除循环并将计数器置于事件处理程序之外。下面是一个可运行的示例:
import wx
########################################################################
class MyFrame(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="Test")
panel = wx.Panel(self)
self.count = 0
self.mainSizer = wx.BoxSizer(wx.VERTICAL)
usernameLbl = wx.StaticText(panel, label="Username:")
self.username = wx.TextCtrl(panel)
self.addWidgets(usernameLbl, self.username)
pwLbl = wx.StaticText(panel, label="Password:")
self.pw = wx.TextCtrl(panel)
self.addWidgets(pwLbl, self.pw)
btn = wx.Button(panel, label="Login")
btn.Bind(wx.EVT_BUTTON, self.onClick)
self.mainSizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
panel.SetSizer(self.mainSizer)
self.Show()
#----------------------------------------------------------------------
def addWidgets(self, lbl, txt):
""""""
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(lbl, 0, wx.ALL|wx.CENTER, 5)
sizer.Add(txt, 1, wx.ALL|wx.EXPAND, 5)
self.mainSizer.Add(sizer, 0, wx.ALL|wx.EXPAND)
#----------------------------------------------------------------------
def onClick(self, event):
""""""
password = self.pw.GetValue()
user = self.username.GetValue()
if user!="Username" and password!="Password":
# count for the number of tries
msg = "You have %s tries left"%(str(3-self.count))
dlg = wx.MessageDialog(self, msg, "", wx.OK)
dlg.ShowModal()
dlg.Destroy()
self.count += 1
password=self.pw.GetValue() #retakes the password
user=self.username.GetValue() #retakes the username
if self.count == 3:
self.Destroy()
#----------------------------------------------------------------------
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
为什么在'if'中有'while'循环? – mauve
我正在重新考虑if语句,但while循环可以提示一个对话框,告诉用户输入的数据是错误的,并显示剩余的尝试次数 – user2883071
我在说我看不出为什么“如果”部分存在。 – mauve