在wxPython中,是否可以将一个列表“设置”为ComboBox?

3

嗨,我知道可以使用列表来实现这个功能,但是能否使用下拉框来实现呢?是否有类似于set函数的东西?

我尝试使用set函数与下拉框一起使用,但是收到了以下错误信息: AttributeError: 'ComboBox'对象没有属性'Set'

谢谢。

3个回答

6

好的,您可以调用SetItems(myList)将一个列表放入ComboBox中,覆盖原有内容。

编辑:创建ComboBox列表最常见的方法如下:

myList = ["dog", "cat", "hamster"]
cbo = wx.ComboBox(self, choices=myList)

但是由于ComboBox继承自ItemContainer,因此您也可以像以下完整示例一样进行操作:
import wx

########################################################################
class MyFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Test")
        panel = wx.Panel(self)

        myList = ["dog", "cat", "hamster"]
        cbo = wx.ComboBox(panel)
        cbo.SetItems(myList)

        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()

1

2
@Mike Driscoll 值得注意的是,在由Steven提供的wxpython文档中链接的类方法中,并没有列出将列表设置到已创建的组合框中的SetItems方法。这个方法在《wxPython in Action》一书中也没有被引用,甚至一次都没有被提及...所以我理解为什么原帖作者要给它一个+1 (点赞),因为即使这本书也让你相信使用Set方法就可以实现组合框的操作,但实际上并不适用于组合框。我在书上做了注解,以便每次查阅时能记住这一点。 - joaquin
2
@joaquin 如果你使用的是Robin书中所写的旧版本,可能会起作用。如果你在Steven的链接中向上查看继承层次结构,就会出现SetItems方法。只需点击页面顶部的ItemContainer链接即可。但是确实有些令人困惑。 - Mike Driscoll

1
我相信您正在寻找一种在运行时添加新项目的方法,即在创建表单之后。如果是这样,请参见下面的代码;-)
   def UpdateCitiesCombo(self):
    self.cmbCities.Clear()
    pc = PostalCode()
    if self.txtPostalCode.Value:
        cities = pc.GetFromCode(int(self.txtPostalCode.Value))
        for city in cities:
            self.cmbCities.Append(city[2])

    items = self.cmbCities.GetItems()

    index = -1
    try:
        if self.customer.city != "":
            index = items.index(self.customer.city)
        else:
            index = 0

        self.cmbCities.SetSelection(index)

    except ValueError:
        self.cmbCities.SetValue(self.customer.city)

实质上,您不应该使用ComboBox的Clear()和Append()方法,并且此函数是从某个事件中调用的。希望这正是您要寻找的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接