DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   Python (http://www.daniweb.com/forums/forum114.html)
-   -   wx.CallAfter() (http://www.daniweb.com/forums/thread159816.html)

evstevemd Nov 28th, 2008 3:28 am
wx.CallAfter()
 
Hello All,
can someone tell me exactly what is done by this function?

Thanks alot!

Paul Thompson Nov 28th, 2008 3:35 am
Re: wx.CallAfter()
 
It is used with events in wxPython. If you have a button lets say that when you press it pops up a dialog box. But there is also something else going on and you want the method that makes that dialog box to be called After the event function is done.

So here is the example from http://wiki.wxpython.org/CallAfter
import threading,wx

ID_RUN=101
ID_RUN2=102

class MyFrame(wx.Frame):
    def __init__(self, parent, ID, title):
        wx.Frame.__init__(self, parent, ID, title)
        panel = wx.Panel(self, -1)
        mainSizer=wx.BoxSizer(wx.HORIZONTAL)
        mainSizer.Add(wx.Button(panel, ID_RUN, "Click me"))
        mainSizer.Add(wx.Button(panel, ID_RUN2, "Click me too"))
        panel.SetSizer(mainSizer)
        mainSizer.Fit(self)
        wx.EVT_BUTTON(self, ID_RUN, self.onRun)
        wx.EVT_BUTTON(self, ID_RUN2, self.onRun2)

    def onRun(self,event):
        print "Clicky!"
        wx.CallAfter(self.AfterRun, "I don't appear until after OnRun exits")
        s=raw_input("Enter something:")
        print s

    def onRun2(self,event):
        t=threading.Thread(target=self.__run)
        t.start()

    def __run(self):
        wx.CallAfter(self.AfterRun, "I appear immediately (event handler\n"+ \
                        "exited when OnRun2 finished)")
        s=raw_input("Enter something in this thread:")
        print s

    def AfterRun(self,msg):
        dlg=wx.MessageDialog(self, msg, "Called after", wx.OK|wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()


class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, "CallAfter demo")
        frame.Show(True)
        frame.Centre()
        return True

app = MyApp(0)
app.MainLoop()

evstevemd Nov 28th, 2008 6:18 am
Re: wx.CallAfter()
 
So If I want let say to execute YouWin() method and when it is done I want to execute another method let me call it MeWin(),
How do I do? What Arguments does it need?

Thanks for reply

Paul Thompson Nov 28th, 2008 6:22 am
Re: wx.CallAfter()
 
you would call
wx.CallAfter(self.MeWin,ARGUMENTS)
and then that will call the function after the YouWin function is done.

evstevemd Nov 28th, 2008 3:58 pm
Re: wx.CallAfter()
 
Lastly, what Arguments does it take. Will they be MeWin() method arguments or there are other? I mean wx.CallAfter(self.MeWin(), ARGUMENTS) what exactly ARGUMENTS is?

Paul Thompson Nov 28th, 2008 4:34 pm
Re: wx.CallAfter()
 
Woops, should have called them paramaters. If you have any that are needed then you put them as the second paramater but if there are no paramaters needed for the MeWin method then you dont need to have a second paramater.
Note that you dont put parentheses after the self.MeWin the the wx.CallAfter.

evstevemd Nov 29th, 2008 12:57 am
Re: wx.CallAfter()
 
Thanks Paul


All times are GMT -4. The time now is 7:07 pm.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC