我的脚本存在逻辑问题。 该脚本应该创建两个按钮,即add_button 和subtract_button。单击“添加”按钮时,变量将加一,如果再次单击,变量应加 1,使值变为 2。此外,当单击减法按钮时,它应该从变量中减去 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()
但是,由于您的代码和描述不太匹配,您可能希望在两个按钮之间共享一个变量。 在这种情况下,代码可能需要像这样:
import wx
class ButtonBasic(wx.Frame):
def __init__(self, parent):
super(ButtonBasic, self).__init__(parent)
self.frame = wx.Panel(self)
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, 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.index += 1
self.next_list.append(self.index)
print(self.index)
def prev(self, event):
self.index -= 1
self.previous_list.append(self.index)
print(self.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()