[wxpython-users] Can a group of radio buttons be used as a
one-click selection ?
C M
cmpython at gmail.com
Fri May 9 19:45:56 PDT 2008
On Fri, May 9, 2008 at 8:44 PM, Stef Mientki <s.mientki at ru.nl> wrote:
> hello,
>
> I want a group of radio buttons,
> where clicking on one of the buttons,
> should perform some action.
> Now this works as long as I don't select the same (already selected)
> Radiobutton.
First, just a contention: What would be the (visual) logic of
clicking something that is already selected? Wouldn't the state of
your GUI/app be as that radioButton indicates already? If others are
to use this, I would argue that users might think this way too (or you
could argue that this is a good paradigm switch!).
But it should work if you call event.Skip() to allow the button to
"popped" after you tell it to perform some action. Maybe you were
leaving that out? See a working sample attached.
HTH,
Che
#Boa:Frame:Frame1
import wx
import datetime
def create(parent):
return Frame1(parent)
[wxID_FRAME1, wxID_FRAME1PANEL1, wxID_FRAME1PANEL2, wxID_FRAME1RADIOBUTTON2,
wxID_FRAME1RADIOBUTTON3, wxID_FRAME1TEXTCTRL1,
] = [wx.NewId() for _init_ctrls in range(6)]
class Frame1(wx.Frame):
def _init_ctrls(self, prnt):
# generated method, don't edit
wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
pos=wx.Point(359, 285), size=wx.Size(226, 133),
style=wx.DEFAULT_FRAME_STYLE, title='Frame1')
self.SetClientSize(wx.Size(218, 99))
self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
pos=wx.Point(0, 0), size=wx.Size(218, 99),
style=wx.TAB_TRAVERSAL)
self.panel1.SetBackgroundColour(wx.Colour(47, 66, 240))
self.panel2 = wx.Panel(id=wxID_FRAME1PANEL2, name='panel2',
parent=self.panel1, pos=wx.Point(0, 0), size=wx.Size(218, 99),
style=wx.TAB_TRAVERSAL)
self.panel2.SetBackgroundColour(wx.Colour(214, 222, 239))
self.radioButton2 = wx.RadioButton(id=wxID_FRAME1RADIOBUTTON2,
label=u'click for time in black', name='radioButton2',
parent=self.panel2, pos=wx.Point(8, 8), size=wx.Size(192, 13),
style=0)
self.radioButton2.Bind(wx.EVT_LEFT_DOWN, self.OnRadioButton2LeftDown)
self.radioButton3 = wx.RadioButton(id=wxID_FRAME1RADIOBUTTON3,
label=u'click for time in blue', name='radioButton3',
parent=self.panel2, pos=wx.Point(8, 32), size=wx.Size(152, 13),
style=0)
self.radioButton3.Bind(wx.EVT_LEFT_DOWN, self.OnRadioButton3LeftDown)
self.textCtrl1 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL1, name='textCtrl1',
parent=self.panel2, pos=wx.Point(8, 56), size=wx.Size(200, 32),
style=0, value='textCtrl1')
def __init__(self, parent):
self._init_ctrls(parent)
def OnRadioButton2LeftDown(self, event):
now = str(datetime.datetime.now())
self.textCtrl1.SetValue(now)
self.textCtrl1.SetForegroundColour('Black')
event.Skip()
def OnRadioButton3LeftDown(self, event):
now = str(datetime.datetime.now())
self.textCtrl1.SetValue(now)
self.textCtrl1.SetForegroundColour('Blue')
event.Skip()
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = create(None)
frame.Show()
app.MainLoop()
More information about the wxpython-users
mailing list