wxPython:wx.Choice 事件 EVT_CHOICE 在应用程序启动时触发,但在选择更改时不触发

wxPython: wx.Choice event EVT_CHOICE fires on app start but not on selection change

我使用以下 class 创建了一个 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" 项目:这是我用来处理本地化的东西。
self.list_available_languages() 是一个用项目填充 Choice 的静态方法。

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

我宁愿不必使用按钮来捕捉 selection 并在 selection 更改时正确执行。我不明白我做错了什么。

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