问题:当我将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()
答案 0 :(得分:0)
您错过了活动。
解决此问题的方法是发送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(false)),则事件将 不再处理。如果调用Skip(true),则事件 处理系统继续搜索其他处理程序功能 对于此事件,即使它已经在 当前的处理程序。
通常,建议跳过所有非命令事件以允许 进行默认处理。但是,命令事件是 通常不像按钮之类的单个命令那样被跳过 单击或菜单项选择只能由一个处理程序处理。
参数:跳过(布尔)