wxPython:wx.Choice事件EVT_CHOICE会在应用开始时触发但不会在选择更改时触发

时间:2017-10-02 14:15:18

标签: drop-down-menu event-handling wxpython wxwidgets wxpython-phoenix

我使用以下类创建了一个wx.Choice:

class LanguageSelector(wx.Choice):
"""Class for the creation of a language selector."""
def __init__(self, parent):
    """Create a language selector, default to current language and bind options to localisation methods."""
    super().__init__(parent=parent, choices=self.list_available_languages())

    self.SetSelection(self.FindString(loc.o))  # Set current language as default option.

    self.Bind(wx.EVT_CHOICE, self.on_choice())  # This is the problem.

def on_choice(self):
    print("on_choice was triggered. Selected item is: " + str(self.GetSelection()))
    selection = self.GetString(self.GetSelection())
    print("Converted selection is: " + selection)
    loc.change(selection)
不要介意" loc" item:这是我用来处理本地化的东西 self.list_available_languages()是一个静态方法,用项填充Choice。

现在的问题是:当我运行应用程序时,会立即打印打印消息并显示默认选择(这是我不会发生的事情,但它并不重要),但是当我尝试在Choice下拉列表中选择各种选项时,没有事件被触发,无论我选择哪一个。

我更喜欢不必使用按钮来捕捉选择并在选择更改时正确执行。我不明白我做错了什么。

1 个答案:

答案 0 :(得分:1)

您正在调用您的处理程序而不是绑定它。您必须传递函数而不是将此函数调用到Bind()的结果。只需删除括号即可解决此问题。