wxPython: How to handle event binding and Show() properly.

Posted by Gopal on Stack Overflow See other posts from Stack Overflow or by Gopal
Published on 2010-04-26T07:44:03Z Indexed on 2010/04/27 20:53 UTC
Read the original article Hit count: 266

Filed under:
|
|

Hi all, I'm just starting out with wxPython and this is what I would like to do:

a) Show a Frame (with Panel inside it) and a button on that panel. b) When I press the button, a dialog box pops up (where I can select from a choice). c) When I press ok on dialog box, the dialog box should disappear (destroyed), but the original Frame+Panel+button are still there. d) If I press that button again, the dialog box will reappear.

My code is given below. Unfortunately, I get the reverse effect. That is,

a) The Selection-Dialog box shows up first (i.e., without clicking on any button since the TopLevelframe+button is never shown).

b) When I click ok on dialog box, then the frame with button appears.

c) Clicking on button again has no effect (i.e., dialog box does not show up again).

What am I doing wrong ? It seems that as soon as the frame is initialized (even before the .Show() is called), the dialog box is initialized and shown automatically.

I am doing this using Eclipse+Pydev on WindowsXP with Python 2.6

============File:MainFile.py===============

import wx
import MyDialog   #This is implemented in another file: MyDialog.py

class TopLevelFrame(wx.Frame):

    def __init__(self,parent,id):    
        wx.Frame.__init__(self,parent,id,"Test",size=(300,200))
        panel=wx.Panel(self)
        button=wx.Button(panel, label='Show Dialog', pos=(130,20), size=(60,20))

        # Bind EVENTS --> HANDLERS. 
        button.Bind(wx.EVT_BUTTON, MyDialog.start(self))  


# Run the main loop to start program.         
if __name__=='__main__':
    app=wx.PySimpleApp()    
    TopLevelFrame(parent=None, id=-1).Show()  
    app.MainLoop()

============File:MyDialog.py===============

import wx

def start(parent):
    inputbox = wx.SingleChoiceDialog(None,'Choose Fruit', 'Selection Title',
                                     ['apple','banana','orange','papaya'])
    if inputbox.ShowModal()==wx.ID_OK:
        answer = inputbox.GetStringSelection()
        inputbox.Destroy()

© Stack Overflow or respective owner

Related posts about wxpython

Related posts about show