WxPython 4.2.0 Combobox选中后值无法更改(跨平台异常求助)
问题成因
每次选择x时,你都会重新创建一个新的y ComboBox控件并赋值给self.y,但旧的y控件并未被销毁。在Windows平台的wxPython实现中,这种重复创建控件的操作会干扰父窗口的事件处理逻辑,导致x控件的后续选择事件无法被正常捕获,最终表现为x无法再更改。macOS的控件管理机制对这类场景兼容性更好,因此未出现该问题。
解决方法
不要重复创建y控件,而是在初始化阶段就创建好y控件,后续仅更新其选项列表即可,具体代码修改如下:
初始化控件
self.x = wx.ComboBox(self, wx.ID_ANY, "x", wx.Point(60, 43), (220, 30), x_choices, 0) self.x.Bind(wx.EVT_COMBOBOX, self.update_y) # 提前创建y控件,初始选项为空 self.y = wx.ComboBox(self, wx.ID_ANY, "y", wx.Point(60, 73), (220, 30), [], 0)
更新y控件选项
def update_y(self, event): selected_x = self.x.GetStringSelection() y_choice = df.loc[df['A'] == selected_x, 'y'].tolist() # 清空原有选项并添加新选项 self.y.Clear() self.y.AppendItems(y_choice) # 可选:自动选中第一个选项(如果有选项的话) if y_choice: self.y.SetSelection(0)
备选方案(不推荐)
如果必须动态创建控件,需先销毁旧的y控件再创建新的,避免控件堆积干扰事件处理:
def update_y(self, event): # 销毁旧的y控件(如果存在) if hasattr(self, 'y'): self.y.Destroy() selected_x = self.x.GetStringSelection() y_choice = df.loc[df['A'] == selected_x, 'y'].tolist() self.y = wx.ComboBox(self, wx.ID_ANY, "y", wx.Point(60, 73), (220, 30), y_choice, 0)
内容的提问来源于stack exchange,提问作者Gilseung Ahn
相关产品推荐
相关产品推荐

