【问题标题】:store returned function value in a list WXpython将返回的函数值存储在列表中 WXpython
【发布时间】:2018-09-25 20:55:49
【问题描述】:

问题:当我将 DatePicker obj 与一个函数绑定时,它在该函数中可以正常工作,但是当我尝试将相同的值附加到另一个函数中的列表时,它会执行 1 或 2 件事,错误会说

[<bound method F_Main.date_Begin of <guiwm.F_Main object at 0x08D01490>>, (15, 48, 55)]

我知道的意思是直接调用函数,所以我应该在函数调用的末尾添加一个括号“()”,但是当我添加它时,我得到以下错误

date_Begin() missing 1 required positional argument: 'event'

下面是我的一些代码以及事件绑定

self.dateBegin.Bind( wx.adv.EVT_DATE_CHANGED, self.date_Begin )
def date_Begin( self, event ):
    aStringDate = self.dateBegin.GetValue().Format("%m-%d-%y")
    print(aStringDate)
    return aStringDate
    event.Skip()
def time_Begin(self):
    aStringTime = self.timeBegin.GetTime()
    print(aStringTime)
    return aStringTime

这是我调用另一个函数

def clickBtn_Generate( self, event ):
    a = self.date_Begin()
    b = self.time_Begin()
    list = []
    list.append(a)
    list.append(b)
    print(list)
    return list
    event.Skip()

我已经尝试删除并保留括号

a = self.date_Begin

但它们都不起作用。知道如何解决这个问题吗?

class F_Main ( wx.Frame ):

def __init__( self, parent ):
    wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"Generator", pos = wx.DefaultPosition, size = wx.Size( 800,800 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

    self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
    self.SetForegroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOW ) )
    self.SetBackgroundColour( wx.Colour( 255, 255, 0 ) )

    bSizer5 = wx.BoxSizer( wx.HORIZONTAL )

    self.lbl_WS1 = wx.StaticText( self, wx.ID_ANY, u"Wafer Sort 1", wx.DefaultPosition, wx.DefaultSize, 0 )
    self.lbl_WS1.Wrap( -1 )
    self.lbl_WS1.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_ACTIVECAPTION ) )

    bSizer5.Add( self.lbl_WS1, 0, wx.ALL, 10 )

    self.dateBegin = wx.adv.DatePickerCtrl( self, wx.ID_ANY, wx.DefaultDateTime, wx.DefaultPosition, wx.DefaultSize, wx.adv.DP_DROPDOWN )
    bSizer5.Add( self.dateBegin, 0, wx.ALL, 5 )

    self.timeBegin = wx.adv.TimePickerCtrl( self, wx.ID_ANY, wx.DefaultDateTime, wx.DefaultPosition, wx.DefaultSize, wx.adv.DP_DEFAULT )
    bSizer5.Add( self.timeBegin, 0, wx.ALL, 5 )

    self.dateEnd = wx.adv.DatePickerCtrl( self, wx.ID_ANY, wx.DefaultDateTime, wx.DefaultPosition, wx.DefaultSize, wx.adv.DP_DROPDOWN )
    bSizer5.Add( self.dateEnd, 0, wx.ALL, 5 )

    self.timeEnd = wx.adv.TimePickerCtrl( self, wx.ID_ANY, wx.DefaultDateTime, wx.DefaultPosition, wx.DefaultSize, wx.adv.DP_DEFAULT )
    bSizer5.Add( self.timeEnd, 0, wx.ALL, 5 )

    self.btnGenerate = wx.Button( self, wx.ID_ANY, u"MyButton", wx.DefaultPosition, wx.DefaultSize, 0 )
    bSizer5.Add( self.btnGenerate, 0, wx.ALL, 5 )

    self.SetSizer( bSizer5 )
    self.Layout()

    self.Centre( wx.BOTH )

    # Connect Events
    self.dateBegin.Bind( wx.adv.EVT_DATE_CHANGED, self.date_Begin )
    #self.timeBegin.Bind(wx.adv.EVT_TIME_CHANGED, self.time_Begin)
    self.dateEnd.Bind( wx.adv.EVT_DATE_CHANGED, self.date_End )
    self.timeEnd.Bind(wx.adv.EVT_TIME_CHANGED, self.time_End)
    self.btnGenerate.Bind( wx.EVT_BUTTON, self.clickBtn_Generate )

def __del__( self ):
    pass


# Virtual event handlers, overide them in your derived class
def date_Begin( self, event ):
    aStringDate = self.dateBegin.GetValue().Format("%m-%d-%y")
    print(aStringDate)
    return aStringDate
    event.Skip()
def time_Begin(self):
    aStringTime = self.timeBegin.GetTime()
    print(aStringTime)
    return aStringTime

def date_End( self, event ):
    aStringDate = event.GetDate()
    event.Skip()

def time_End(self, event):
    aStringTime = event.GetDate()
    print(aStringTime)

def clickBtn_Generate( self, event ):
    a = self.date_Begin()
    b = self.time_Begin()
    list = []
    list.append(a)
    list.append(b)
    print(list)
    return list
    event.Skip()

【问题讨论】:

  • a = self.date_Begin() 将失败,因为根据签名date_Begin( self, event ) 缺少event 的参数。请直接复制粘贴您的代码。
  • 我继续发布了整个代码

标签: python datetime datepicker wxpython


【解决方案1】:

您错过了活动。
解决此问题的方法是发送None,即

a = self.date_Begin(None)

由于您对该函数的编码方式,您还需要在调用 Skip() 之前检查事件,即

def date_Begin( self, event ):
    aStringDate = self.dateBegin.GetValue().Format("%m-%d-%y")
    print(aStringDate)
    return aStringDate
    if event:
        event.Skip()

回应您对Skip的评论

Skip(self, skip=True) 这个方法可以在事件处理程序中使用 控制是否将绑定到该事件的更多事件处理程序 在当前返回后调用。

如果没有 Skip(或等效地使用 Skip(false)),事件将 不再处理。如果调用 Skip(true),则事件 处理系统继续寻找进一步的处理函数 对于这个事件,即使它已经在 当前处理程序。

一般情况下,建议跳过所有非命令事件以允许 要进行的默认处理。然而,命令事件是 通常不会像通常那样跳过单个命令,例如按钮 单击或菜单项选择只能由一个处理程序处理。

参数:skip (bool)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 2011-02-18
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多