wxMessageBox with an auto-close timer in wxPython

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • plomon
    New Member
    • Mar 2008
    • 15

    wxMessageBox with an auto-close timer in wxPython

    Platform and Python installation info:

    Platforms: Windows, OS X
    Python: Active State Python 2.7
    wxPython: Version 2.9


    Here is a sample code in which I use a wxMessageBox:

    Code:
    import wx,os
    
    class Frame(wx.Frame):
        def __init__(self, parent, id, title):
            wx.Frame.__init__(self, parent, id, title, size=(100, 100),style=wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN)
            
            host=os.system('hostname')
            if host!='superman':            
                self.dialogBox=wx.MessageBox('The host name should be superman. Closing this dialog box in 2s...','Info')            
                self.Destroy()
            else:
                self.Center()
                self.Show()
                
    if __name__ == '__main__':
        app = wx.App(redirect=False)
        frame = Frame(None, -1, 'Sample')
        app.MainLoop()
    According to the above piece of code, If the host name is not 'superman' , then the user is displayed a message box and prompted to press 'OK'. If the user presses 'OK' button on the message box, then the control moves to the next line in the code (i.e., line number 10) where the frame is destroyed. I want to be to able to automatically close the dialog box and go to the next line in the code i.e., self.Destroy() if the user does not press the 'OK' button in the next 2 seconds. Any thoughts on how do I do that in wxpython ?
  • dwblas
    Recognized Expert Contributor
    • May 2008
    • 626

    #2
    This requires threading or processing or using wx's timer class. This forum can probably offer more help but no one wants to waste time since this question has been posted on every forum in the known universe, so decide which you would like to use, post some code, and ask questions about that code.

    Comment

    • plomon
      New Member
      • Mar 2008
      • 15

      #3
      Sounds like a tough one to do.

      Comment

      • Elias Alhanatis
        New Member
        • Aug 2007
        • 56

        #4
        Try this:
        1) Create a wx.timer object in your app.
        2) Start the timer just before the wx.MessageBox appears
        3) In the function that your timer calls , 'find' any 'wx.MessageBox' dialogs and 'Destroy' them , so execution continues.
        DOnt know if it will work , but give it a try!!!!

        Comment

        Working...