大家好,美好的一天。我的脚本中有逻辑问题,希望引起您的注意。该脚本应该创建两个按钮,即 add_button 和 substract_button。单击“添加”按钮时,变量将增加 1,如果再次单击,变量应为 1,使值变为 2。此外,当单击 substarct 按钮时,它应该从变量中减去 1。现在,当单击子按钮时变量为 2,结果值应为 1,再次单击时结果值应为零。 如何在不使用循环和递归的情况下实现这一目标?我试了又试都没有成功..
class ButtonBasic(wx.Frame):
def __init__(self, parent):
super(ButtonBasic, self).__init__(parent)
self.frame = wx.Panel(self)
index=0
self.next_list=[]
self.previous_list = []
self.but_next = wx.Button(self.frame, label="Next")
self.but_prev = wx.Button(self.frame, label="Previous")
self.Bind(wx.EVT_BUTTON, lambda event: self.next(index, self.next_list), self.but_next)
self.Bind(wx.EVT_BUTTON, lambda event: self.prev(index, self.previous_list), self.but_prev)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.but_next)
self.sizer.Add(self.but_prev)
self.frame.SetSizer(self.sizer)
self.frame.Layout()
def next(self, idx, next_list):
idx+=1
next_list.append(idx)
self.update(idx)
print(idx)
def prev(self, idx, prev_list):
idx-=1
self.update(idx)
prev_list.append(idx)
print(idx)
def update(self, update_var):
var = update_var
if __name__=='__main__':
app = wx.App()
frame = ButtonBasic(None)
frame.Show()
app.MainLoop() ```
最简单的方法是忘记
lambda
函数并为特定按钮使用特定变量,毕竟您为每个按钮事件声明了特定函数,即:
import wx
class ButtonBasic(wx.Frame):
def __init__(self, parent):
super(ButtonBasic, self).__init__(parent)
self.frame = wx.Panel(self)
self.next_index = 0
self.previous_index = 0
self.next_list=[]
self.previous_list = []
self.but_next = wx.Button(self.frame, label="Next")
self.but_prev = wx.Button(self.frame, label="Previous")
self.Bind(wx.EVT_BUTTON, self.next, self.but_next)
self.Bind(wx.EVT_BUTTON, self.prev, self.but_prev)
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.but_next)
self.sizer.Add(self.but_prev)
self.frame.SetSizer(self.sizer)
self.frame.Layout()
def next(self, event):
self.next_index += 1
self.next_list.append(self.next_index)
print(self.next_index)
def prev(self, event):
self.previous_index -= 1
self.previous_list.append(self.previous_index)
print(self.previous_index)
def OnClose(self, event):
print("Next History:", self.next_list)
print("Previous History:", self.previous_list)
self.Destroy()
if __name__=='__main__':
app = wx.App()
frame = ButtonBasic(None)
frame.Show()
app.MainLoop()