wxPython 在不同方法之间处理事件(按钮和单选按钮)

2 投票
1 回答
5198 浏览
提问于 2025-04-16 13:20

我正在学习wxpython来做一个项目,但遇到了一个问题……

我想知道,点击我的按钮后,怎么才能保存单选按钮的值呢?

我有一个

class SerialFrame(wx.Frame):

里面有

def __init__(self, parent, title):

    super(SerialFrame, self).__init__(parent, title=title, 
                                      size=(550, 400))

    self.SetMinSize(self.GetSize())
    self.InitUI()
    self.Center()
    self.Show()

InitUI方法用来设置我的界面,里面有很多东西,包括三个单选按钮和一个按钮,像这样

def InitUI(self):
    mypanel = wx.Panel(self, -1)
    ...
    baudRadioButton1 = wx.RadioButton(mypanel, -1, '9600', style=wx.RB_GROUP)
    baudRadioButton2 = wx.RadioButton(mypanel, -1, '14400')
    baudRadioButton3 = wx.RadioButton(mypanel, -1, '19200')
    ...
    stopButton = wx.Button(mypanel, 2, label='Stop', size = (70,20))
    ...
    mypanel.Bind(wx.EVT_BUTTON, self.clickStart, id=1)
    mypanel.Bind(wx.EVT_RADIOBUTTON, self.setRadioValues, id=baudRadioButton1.GetId())

我尝试过类似这样的代码

def clickStart(self, event):

    baudRate1 = str(self.baudRadioButton1.GetValue())
    self.Close(True)

但是不管用。顺便说一下,我对面向对象编程的理解还很有限。

1 个回答

3

我假设你已经有了用户界面。单选按钮是用来选择波特率的。

 baudRadioButton1 = wx.RadioButton(mypanel, -1, '9600', style=wx.RB_GROUP)

这里的9600只是显示在图形界面上,你可以把它换成你的名字。

你需要明白,什么事情都不会自动发生。我们必须告诉wxpython,当选择一个单选按钮时应该怎么反应。

你还没有把BaudradioButton1和clickStart1绑定在一起。绑定是用来指定在某个事件发生时,哪个方法或函数需要被调用。

所以,当一个单选按钮被选中时,就会发生一个'EVT_RADIOBUTTON'事件,wxpython会调用你的clickstart1方法。在clickstart方法里,你可以处理波特率。

简单来说,你不需要保存单选按钮的值。

我的建议是:

baudRadioButton1 = wx.RadioButton(mypanel, -1, label='9600', style=wx.RB_GROUP)
baudRadioButton2 = wx.RadioButton(mypanel, -1, label='14400')
baudRadioButton3 = wx.RadioButton(mypanel, -1, label='19200')

把单选按钮和一个方法绑定在一起。

self.Bind(wx.EVT_RADIOBUTTON,self.baudRadioButton1,self.clickstart1)
self.Bind(wx.EVT_RADIOBUTTON,self.baudRadioButton2,self.clickstart2)
self.Bind(wx.EVT_RADIOBUTTON,self.baudRadioButton3,self.clickstart3)

然后这些方法会是:

def clickStart1(self, event):
    baudRate = 9600
    ......


def clickStart2(self, event):
    baudRate = 14400
    ......

等等……

我建议你了解一下事件机制。

希望这对你有帮助。

撰写回答