wxPython обрабатывает события (кнопка и переключатель) между различными методами - PullRequest
2 голосов
/ 09 марта 2011

Я изучаю wxpython для одного из моих проектов, и у меня есть проблема .. Как сохранить значение RadioButton после нажатия на кнопку?

У меня есть

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 настраивает мой пользовательский интерфейс, в котором есть куча вещей, включая 3 радиокнопки и такую ​​кнопку

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 голосов
/ 09 марта 2011

Я предполагаю, что у вас есть пользовательский интерфейс. Переключатель используется для выбора скорости передачи.

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

здесь 9600 печатается только в графическом интерфейсе. Вы можете поставить свое имя вместо 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
    ......

и т. Д.

Я бы предложил вам прочитать о механизме событий.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...