루프는 사용자가 무언가를하도록하는 대신 메시지 대화 상자를 계속 반복 작성합니다. 루프를 제거하고 카운터를 이벤트 처리기 외부에 배치해야합니다. 다음은 실행 가능한 예제입니다.
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
왜 내가 그 이유를 알지 못한다고 말하고 있습니다. "if"부분이 존재합니다. – mauve