Reputation: 77
Currently I'm working on my Final High school project and I have a serious problem.
I create a wx.Toolbar, add each option using wx.AddTool, and then I bind some functions to it, it does all the stuff only once (at the beginning) and refuses to do anything after clicking on it.. Basically... It starts way earlier than I want to.
I will skip some code, I will only use the needed one.
self.frame_toolbar.AddTool(1, "one", Base64ToImg(image1), Base64ToImage(image1-disabled), "One", "First Thing")
self.frame_toolbar.AddTool(2, "two", Base64ToImg(image1), Base64ToImage(image1-disabled), "Two", "Second Thing")
self.frame_toolbar.AddTool(3, "three", Base64ToImg(image1), Base64ToImage(image1-disabled), "Three", "Third Thing")
self.frame_toolbar.Realize()
self.SetToolBar(self.frame_toolbar)
So now, I have toolbar with some tools on it. Now:
self.Bind(wx.EVT_TOOL, self.onefunction(params), id=1)
self.Bind(wx.EVT_BUTTON, self.twofunction(params), id=2)
self.Bind(wx.EVT_MENU, self.threefunction(params), id=3)
and also
self.frame_toolbar.Bind(wx.EVT_TOOL, self.onefunction(params), id=1)
self.frame_toolbar.Bind(wx.EVT_BUTTON, self.twofunction(params), id=2)
self.frame_toolbar.Bind(wx.EVT_MENU, self.threefunction(params), id=3)
executes immediately when toolbar loads. Is possible to make it execute ONLY when I click on the button?
Thank you so so so much for any help. R
Upvotes: 2
Views: 297
Reputation: 1581
You are calling the function immediately, self.onefunction(params)
. Try removing the parenthesis - this will keep it as a function rather than the return of the function
self.Bind(wx.EVT_TOOL, self.onefunction, id=1)
self.Bind(wx.EVT_BUTTON, self.twofunction, id=2)
self.Bind(wx.EVT_MENU, self.threefunction, id=3)
If you need to pass in params, please check Joran's answer
Upvotes: 2
Reputation: 114098
self.frame_toolbar.Bind(wx.EVT_TOOL, lambda evt:self.onefunction(params), id=1)
I think solves your issue
Upvotes: 2