【问题标题】:wxGTK+ wxComboBox deselectionwxGTK+ wxComboBox 取消选择
【发布时间】:2026-01-24 19:15:01
【问题描述】:

在 Windows 下创建 wx.ComboBox 时,您可以指定 wxCB_READONLY 让用户从建议的选项中进行选择。但您可以通过以下方式清除选择:

combo.SetSelection(wx.NOT_FOUND)

但在 linux (wxGTK) 下,该选项在创建时被取消选择,但一旦被选中就无法清除。不是以下任何一种:

combo.SetSelection(wx.NOT_FOUND)
combo.SetValue('')

有没有可能做到这一点?

【问题讨论】:

    标签: python gtk wxpython wxwidgets


    【解决方案1】:

    实际上,在 Arch Linux 上将值设置为空字符串对我有用:

    import wx
    
    ########################################################################
    class MyPanel(wx.Panel):
        """"""
    
        #----------------------------------------------------------------------
        def __init__(self, parent):
            """Constructor"""
            wx.Panel.__init__(self, parent)
    
            choices = ["", "1", "2", "3"]
            self.choices = choices
            self.cbo = wx.ComboBox(self, value="1", choices=choices)
            btn = wx.Button(self, label="Reset")
            btn.Bind(wx.EVT_BUTTON, self.onReset)
    
            sizer = wx.BoxSizer(wx.VERTICAL)
            sizer.Add(self.cbo, 0, wx.ALL, 5)
            sizer.Add(btn, 0, wx.ALL, 5)
            self.SetSizer(sizer)
    
        #----------------------------------------------------------------------
        def onReset(self, event):
            """"""
            print "resetting"
            self.cbo.SetValue("")
    
    
    ########################################################################
    class MyFrame(wx.Frame):
        """"""
    
        #----------------------------------------------------------------------
        def __init__(self):
            """Constructor"""
            wx.Frame.__init__(self, None, title="CombBox")
            panel = MyPanel(self)
            self.Show()
    
    if __name__ == "__main__":
        app = wx.App(False)
        frame = MyFrame()
        app.MainLoop()
    

    【讨论】:

    • 但是您在列表中添加了 '' 选择 - 这是否意味着用户可以选择?当我不添加此类选择时,在 MSW 下我可以以编程方式取消选择 ComboBox,但用户无法选择 deselected 状态。
    • 我尝试了两种方法,即使列表中没有“”,它也能正常工作。
    • 好吧 '' 在 SUSE wxGTK+ 上不起作用。但我必须坚持使用这种解决方法 - 将 '' 添加到列表中。