【问题标题】:wxPython handling events (button and radio button) between different methodswxPython 处理不同方法之间的事件(按钮和单选按钮)
【发布时间】:2011-03-09 14:13:15
【问题描述】:

我正在为我的一个项目学习 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 方法设置了我的 UI,它有很多东西,包括 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)

但这行不通。附言我的 OOP 知识仍然有限。

【问题讨论】:

    标签: python oop user-interface wxpython


    【解决方案1】:

    我假设你有 UI。单选按钮用于选择波特率。

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

    这里 9600 只打印在 GUI 上。你可以用你的名字代替 9600。

    您必须了解,没有任何事情会自动发生。我们必须告诉 wxpython 在选择单选按钮时如何反应。

    您尚未完成 BaudradioButton1 与 clickStart1 的绑定。 Bind 用于指定在事件发生时必须调用哪个方法/乐趣。

    因此,选择单选按钮时,会发生“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
        ......
    

    等等..

    我建议您阅读有关事件机制的内容。

    我希望这会有所帮助。

    【讨论】:

    • 您好,感谢您的回复。我想我解决了单选按钮问题。但是我有一个新问题.. 和以前一样,我有几个方法 init、InitUI 等等。如果按下按钮,如何更改 InitUI 中的值?我的 InitUI 中有这一行 displayTextCtrl = wx.TextCtrl(mypanel, value='', style=wx.TE_MULTILINE|wx.TE_AUTO_SCROLL|wx.TE_READONLY)。如果我想在单击按钮(以不同的方法)后执行 displayTextCtrl.SetValue('asdf'),我该怎么做?谢谢
    • 我不确定我明白你的意思。您只需在同一类中所需的任何方法中调用这个有趣的 displayTextCtrl.SetValue('asdf')
    猜你喜欢
    • 2021-11-15
    • 2013-08-16
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多