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()
。只需删除括号即可解决此问题。
我使用以下 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()
。只需删除括号即可解决此问题。