<p>即使我也会直截了当地回答。我会在封闭的框架中设置一个属性来标记单选按钮是否被点击。然后当调用<code>OnRun</code>时,请检查该属性。如果它处于错误的状态,请调用MessageDialog并中止/暂停/修改<code>OnRun</code>。在</p>
<p><strong>编辑</strong>这是我的意思,一个有两个按钮的简单示例,除非单击用户协议,否则这两个按钮都不会导致进一步的操作。在</p>
<pre><code>import wx
class ButtonFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'Button Example',
size=(300, 100))
panel = wx.Panel(self, -1)
self.radio = wx.RadioButton(panel, -1, "Accept user agreement", pos=(50, 10))
self.button = wx.Button(panel, -1, "Run", pos=(50, 30))
self.Bind(wx.EVT_BUTTON, self.OnRun, self.button)
self.button.SetDefault()
self.btn2 = wx.Button(panel, -1, "Walk", pos=(150, 30))
self.Bind(wx.EVT_BUTTON, self.OnWalk, self.btn2)
def OnRun(self, event):
if not self.CheckRadio():
return
self.button.SetLabel("Running")
def OnWalk(self, event):
if not self.CheckRadio():
return
self.btn2.SetLabel("Walking")
def CheckRadio(self):
accepted = self.radio.GetValue()
if not accepted:
dlg = wx.MessageDialog(None, 'First accept the user agreement',
'MessageDialog', wx.OK | wx.ICON_QUESTION)
result = dlg.ShowModal() # result not used in this demo
dlg.Destroy()
return False
else:
return True
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = ButtonFrame()
frame.Show()
app.MainLoop()
</code></pre>
<p>代码改编自<a href="http://wiki.wxpython.org/wxPythonInAction" rel="nofollow">wxPython in Action</a>的清单7.11。如果你在过去的时间里还没有解决这个问题,我希望这能有所帮助。在</p>