Cross-platform issue with wxRadioBox

eugene.gokhvat at gmail.com eugene.gokhvat at gmail.com
Tue Dec 5 17:21:03 EST 2006


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




More information about the Python-list mailing list