Cross-platform issue with wxRadioBox

gokhvat at gmail.com gokhvat at gmail.com
Mon Dec 4 23:36:16 EST 2006


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




More information about the Python-list mailing list