wxPython:与ComboCtrl一起使用时,ListBox不可选/可点击

时间:2016-08-05 06:16:01

标签: python listbox wxpython

我正在尝试将wx.ListBoxwx.combo.Comboctrl联系起来。示例代码如下。出于某种原因,ListBox中的项目不可点击/可选。我想知道我怎么能让它发挥作用。谢谢!

编辑:添加了缺失的代码

import wx, wx.combo

class MainFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, title="", size=(300, 100))
        gbs = wx.GridBagSizer()
        ComboCtrlBox = wx.combo.ComboCtrl(self)
        ComboCtrlPopup = ListBoxComboPopup()
        ComboCtrlBox.SetPopupControl(ComboCtrlPopup)
        ComboCtrlPopup.ListBox.Append("Apple")
        ComboCtrlPopup.ListBox.Append("Banana")
        ComboCtrlPopup.ListBox.Append("Orange")

        ComboCtrlPopup.ListBox.Bind(wx.EVT_LISTBOX, self.OnSelect) #ADDED

        gbs.Add(ComboCtrlBox, pos = (0, 0), span = (1, 1), flag = wx.EXPAND|wx.ALL, border = 10)
        gbs.AddGrowableCol(0)
        self.SetSizer(gbs)
        self.Layout()

    def OnSelect(self, evt):    #ADDED
        print "HAHA"


class ListBoxComboPopup(wx.combo.ComboPopup):
    def Init(self):
        self.ItemList = []

    def Create(self, parent):
        self.ListBox = wx.ListBox(parent, -1, size = (-1, 20), choices = self.ItemList)

    def GetControl(self):
        return self.ListBox

    def OnPopup(self):
        pass

#-----------------------------------------------------------------------------#

if __name__ == '__main__':
    APP = wx.App(False)
    FRAME = MainFrame(None)
    FRAME.Show()
    APP.MainLoop()

1 个答案:

答案 0 :(得分:0)

您遗失了ListBoxComboPopup课程中的一些内容,以使其与ComboCtrl配合使用。您至少缺少一些事件绑定和处理程序来捕获ListBox中的选择事件,以及组合将调用以获取值的GetStringValue方法的实现。有关更多详细信息和示例代码,请参阅wxPython演示中的ComboCtrl示例。