Cross-platform issue with wxRadioBox

Discussion in 'Python' started by gokhvat@gmail.com, Dec 5, 2006.

  1. Guest

    I am experiencing a strange cross-platform issue with my python
    program.

    I am using wxRadioBox to create radio buttons. When I run the python
    code on a mac, everything works perfectly, but not on a pc. On the pc,
    no matter what selection I made, the form would think that I was
    choosing the 1st (top) option.

    I am astounded that everything else could work and something this
    simple could have cross-platform issues.

    I looked into wxRadioBox online and no one seems to have any similar
    errors. I was thinking it might be the installation of the wx module on
    the pc, but I somehow doubt it.

    Does anyone have any insight as to what is going on here?



    # BEGIN CODE

    import wx;

    SUBMIT_BUTTON = wx.ID_HIGHEST + 10;

    class regFrame(wx.Frame):
    def __init__(self, parent, title):
    wx.Frame.__init__(self, parent, -1, title,
    pos=(100, 100), size=(800, 600));

    fileDialog = wx.FileDialog(self, "Select a file to which to write",
    style = wx.SAVE | wx.OVERWRITE_PROMPT,
    wildcard="*.txt|Text");
    if(fileDialog.ShowModal() != wx.ID_OK):
    print "No file specified - closing";
    self.Close();
    return;
    write_file = fileDialog.GetPath();

    self.write_file = open(write_file, "a");

    # init main frame with menu and status bars
    menuBar = wx.MenuBar();
    fileMenu = wx.Menu();

    fileMenu.Append(wx.ID_ABOUT, "&About\tAlt-A", "About this program");
    fileMenu.AppendSeparator();
    fileMenu.Append(wx.ID_EXIT, "&Quit\tAlt-Q", "Quit this program");
    menuBar.Append(fileMenu, "&File");
    self.SetMenuBar(menuBar);

    self.CreateStatusBar();

    self.ctrl_sizer = wx.GridBagSizer(5, 15);

    # build the controls
    # TO MODIFY THE LIST OF SIZES, CHANGE THIS:
    self.valid_sizes = ['4XLT', '3XLT', '2XLT', '2XL', 'XLT', 'LT', 'XL',
    'L', 'M', 'S', 'XS', 'XXS'];


    instructions = "Enter your netid, full name, and size in the " + \
    "boxes below and press the 'Submit Order' button to place " + \
    "your order.";
    self.instruction_text = wx.StaticText(self, -1, instructions);
    self.id_text = wx.StaticText(self, -1, "netid");
    self.id_input = wx.TextCtrl(self, -1, "", size=(100, -1));
    self.name_text = wx.StaticText(self, -1, "name");
    self.name_input = wx.TextCtrl(self, -1, "", size=(100, -1));
    self.size_text = wx.StaticText(self, -1, "size selection");
    self.size_selection = wx.RadioBox(self, -1,
    choices = self.valid_sizes,
    style = wx.RA_SPECIFY_ROWS
    );
    self.submit_button = wx.Button(self, SUBMIT_BUTTON, "Submit Order");

    # put the controls into a grid
    self.ctrl_sizer.Add(self.instruction_text, (0, 0),
    span=(1, 4), flag=wx.EXPAND);

    self.ctrl_sizer.Add(self.id_text, (1, 0), flag=wx.EXPAND);
    self.ctrl_sizer.Add(self.name_text, (1, 1), flag=wx.EXPAND);
    self.ctrl_sizer.Add(self.size_text, (1, 2), flag=wx.EXPAND);

    self.ctrl_sizer.Add(self.id_input, (2, 0), flag=wx.HORIZONTAL);
    self.ctrl_sizer.Add(self.name_input, (2, 1), flag=wx.HORIZONTAL);
    self.ctrl_sizer.Add(self.size_selection, (2, 2), flag=wx.EXPAND);
    self.ctrl_sizer.Add(self.submit_button, (2, 3), flag=wx.HORIZONTAL);

    self.SetSizer(self.ctrl_sizer);
    self.ctrl_sizer.Fit(self);

    # register event handling functions
    wx.EVT_MENU(self, wx.ID_ABOUT, self.OnAbout);
    wx.EVT_MENU(self, wx.ID_EXIT, self.OnExit);
    wx.EVT_BUTTON(self, SUBMIT_BUTTON, self.OnSubmit);

    def OnAbout(self, evt):
    return;

    def OnExit(self, evt):
    if(self.write_file):
    self.write_file.close();
    self.Close();

    def OnSubmit(self, evt):
    # build a tab-delimited-text line of the data and write it
    save_fields = [self.id_input.GetValue(),
    self.name_input.GetValue(),
    self.size_selection.GetStringSelection()];
    save_str = "\t".join(save_fields);

    # ask for validation before we save
    dialog_str = "Are you sure this is correct?" + \
    "\n Netid: " + save_fields[0] + \
    "\n Name: " + save_fields[1] + \
    "\n Size: " + save_fields[2];
    if(wx.MessageBox(dialog_str, "Confirm Order",
    wx.YES_NO | wx.ICON_EXCLAMATION)
    == wx.YES):
    # write it out and flush the buffer to make sure it's on disk
    self.write_file.write(save_str + "\n");
    self.write_file.flush();
    wx.MessageBox("Your order has been saved. Thanks!");
    # reset the controls for the next user
    self.id_input.SetValue('');
    self.name_input.SetValue('');
    self.size_selection.SetSelection(0);


    class pyReg2App(wx.App):
    def OnInit(self):
    main_frame = regFrame(None, "Senior Jacket Registration");
    self.SetTopWindow(main_frame);
    main_frame.Show(True);
    return True;

    reg_app = pyReg2App(redirect=False);
    reg_app.MainLoop();
    # END CODE
     
    , Dec 5, 2006
    #1
    1. Advertising

  2. Guest

    I have updated my script to use wx.RadioButton instead, which works
    perfectly on my mac again, but now the submit button doesn't show up on
    the pc and I can't click in the netid field on the pc either. any
    ideas?

    # BEGIN CODE

    import wx;

    SUBMIT_BUTTON = wx.ID_HIGHEST + 10;

    class regFrame(wx.Frame):
    def __init__(self, parent, title):
    wx.Frame.__init__(self, parent, -1, title,
    pos=(100, 100), size=(800, 600));

    fileDialog = wx.FileDialog(self, "Select a file to which to write",
    style = wx.SAVE | wx.OVERWRITE_PROMPT,
    wildcard="*.txt|Text");
    if(fileDialog.ShowModal() != wx.ID_OK):
    print "No file specified - closing";
    self.Close();
    return;
    write_file = fileDialog.GetPath();

    self.write_file = open(write_file, "a");

    # init main frame with menu and status bars

    self.panel = wx.Panel ( self, -1 )

    menuBar = wx.MenuBar();
    fileMenu = wx.Menu();

    fileMenu.Append(wx.ID_ABOUT, "&About\tAlt-A", "About this program");
    fileMenu.AppendSeparator();
    fileMenu.Append(wx.ID_EXIT, "&Quit\tAlt-Q", "Quit this program");
    menuBar.Append(fileMenu, "&File");
    self.SetMenuBar(menuBar);

    self.CreateStatusBar();

    self.ctrl_sizer = wx.GridBagSizer(5, 15);

    # build the controls

    instructions = " Enter your netid and size in the " + \
    "boxes below and press the 'Submit Order' button to place " + \
    "your order.";

    self.instruction_text = wx.StaticText(self, -1, instructions);
    self.id_text = wx.StaticText(self, -1, " netid");
    self.id_input = wx.TextCtrl(self, -1, "", size=(160, -1));
    self.size_text = wx.StaticText(self, -1, "size");
    self.submit_button = wx.Button(self, SUBMIT_BUTTON, "Submit Order");

    # put the controls into a grid

    self.ctrl_sizer.Add(self.instruction_text, (0, 0),
    span=(1, 3), flag=wx.EXPAND);

    self.ctrl_sizer.Add(self.id_text, (1, 0), flag=wx.EXPAND);
    self.ctrl_sizer.Add(self.size_text, (1, 1), flag=wx.EXPAND);
    self.ctrl_sizer.Add(self.id_input, (2, 0), flag=wx.HORIZONTAL);

    # TO MODIFY THE LIST OF SIZES, CHANGE THIS:
    self.valid_sizes = ['4XLT', '3XLT', '2XLT', '2XL', 'XLT',
    'XL', 'LT', 'L', 'M', 'S', 'XS', 'XXS'];
    first_size = 1;
    size_count = 0;
    self.button_array = [];
    for this_size in self.valid_sizes:
    this_button = '';
    if first_size:
    this_button = wx.RadioButton(self.panel, -1, this_size,
    style=wx.RB_GROUP);
    first_size = 0;
    else:
    this_button = wx.RadioButton(self.panel, -1, this_size);
    self.button_array.append(this_button);
    self.ctrl_sizer.Add(this_button, (size_count+2, 1));
    size_count += 1;

    self.ctrl_sizer.Add(self.submit_button, (2, 2), flag=wx.HORIZONTAL);

    self.SetSizer(self.ctrl_sizer);
    self.ctrl_sizer.Fit(self);
    # register event handling functions
    wx.EVT_MENU(self, wx.ID_ABOUT, self.OnAbout);
    wx.EVT_MENU(self, wx.ID_EXIT, self.OnExit);
    wx.EVT_BUTTON(self, SUBMIT_BUTTON, self.OnSubmit);

    def OnAbout(self, evt):
    return;

    def OnExit(self, evt):
    if(self.write_file):
    self.write_file.close();
    self.Close();

    def OnSubmit(self, evt):
    selected_index = -1;
    this_index = 0;
    for this_button in self.button_array:
    if this_button.GetValue():
    selected_index = this_index;
    this_index += 1;

    # make sure the user selected something
    if selected_index == -1:
    wx.MessageBox("You must select a size to place your order",
    "Please select a size",
    wx.ICON_EXCLAMATION);
    return;

    # build a tab-delimited-text line of the data and write it
    save_fields = [self.id_input.GetValue(),
    self.valid_sizes[selected_index]];
    save_str = "\t".join(save_fields);

    # ask for validation before we save
    dialog_str = "Are you sure this is correct?" + \
    "\n Netid: " + save_fields[0] + \
    "\n Size: " + save_fields[1];
    if(wx.MessageBox(dialog_str, "Confirm Order",
    wx.YES_NO | wx.ICON_EXCLAMATION)
    == wx.YES):
    # write it out and flush the buffer to make sure it's on disk
    self.write_file.write(save_str + "\n");
    self.write_file.flush();
    wx.MessageBox("Your order has been saved. Thanks!");
    # reset the controls for the next user
    self.id_input.SetValue('');
    self.button_array[selected_index].SetValue(0);



    class pyReg2App(wx.App):
    def OnInit(self):
    main_frame = regFrame(None, "Senior Jacket Registration");
    self.SetTopWindow(main_frame);
    main_frame.Show(True);
    return True;

    reg_app = pyReg2App(redirect=False);
    reg_app.MainLoop();
    # END CODE
     
    , Dec 5, 2006
    #2
    1. Advertising

  3. cmcp Guest

    wrote:

    > I have updated my script to use wx.RadioButton instead, which works
    > perfectly on my mac again, but now the submit button doesn't show up on
    > the pc and I can't click in the netid field on the pc either. any
    > ideas?
    >

    I modified the __init__() method of class regFrame from your original
    posting to create a wx.Panel as a child of self and then made all the
    controls be children of this panel. Your app then seemed to work OK on
    Windows XP. Using a wx.Panel to hold the content of a frame is a
    standard wxPython idiom. I find reading the wxPython demo source is a
    very useful way to learn this sort of thing.

    HTH,
    -- CMcP
     
    cmcp, Dec 6, 2006
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. jcc
    Replies:
    15
    Views:
    4,710
    Nigel Wade
    May 12, 2006
  2. Coca
    Replies:
    15
    Views:
    647
    Alan Balmer
    Jan 14, 2004
  3. Michele Petrazzo

    [WX] wxRadioBox and change choice

    Michele Petrazzo, Sep 14, 2004, in forum: Python
    Replies:
    2
    Views:
    514
    Michele Petrazzo
    Sep 14, 2004
  4. David H
    Replies:
    0
    Views:
    479
    David H
    Dec 3, 2004
  5. Kaspar Schiess

    platform.rb (was: PLATFORM tests)

    Kaspar Schiess, Nov 25, 2005, in forum: Ruby
    Replies:
    0
    Views:
    128
    Kaspar Schiess
    Nov 25, 2005
Loading...

Share This Page