是否可以创建一个函数来将变量增加或减少一,而不使用循环或递归(wxpython)。该变量应该更新

问题描述 投票:0回答:1

大家好,美好的一天。我的脚本中有逻辑问题,希望引起您的注意。该脚本应该创建两个按钮,即 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() ```
python wxpython
1个回答
0
投票

最简单的方法是忘记

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()
© www.soinside.com 2019 - 2024. All rights reserved.