python - 如何创建带有值和文本节点的下拉菜单 - WXPython

标签 python drop-down-menu wxpython wxwidgets

在 HTML 中,我可以创建这样的下拉菜单:

<select name="">
    <option value="">TextNode #1</option>
    <option value="">TextNode #2</option>
<select>

现在我想要在 wxPython 中有类似的东西。 问题是我还没有找到解决方案,因为它只允许我放置文本而不是值。

示例 wxPython(创建下拉列表):

DropDownList = []
Options = {0:"None",1:"All",2:"WTF?!!"}
For Value, TextNode in Options:
    DropDownList.append( TextNode )

wx.ComboBox(panel,value="Select",choices=DropDownList)

嗯...我如何使用文本节点的附加值?.. 谢谢!

最佳答案

您可以使用 ComboBox 的 Append 方法向控件中的每个项目添加附加信息。

这是有关该过程的教程:http://www.blog.pythonlibrary.org/2010/12/16/wxpython-storing-object-in-combobox-or-listbox-widgets/

这是文章中的代码示例:

import wx

########################################################################
class Car:
    """"""

    #----------------------------------------------------------------------
    def __init__(self, id, model, make, year):
        """Constructor"""
        self.id = id
        self.model = model
        self.make = make
        self.year = year       


########################################################################
class MyForm(wx.Frame):

    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial")

        # Add a panel so it looks the correct on all platforms
        panel = wx.Panel(self, wx.ID_ANY)

        cars = [Car(0, "Ford", "F-150", "2008"),
                Car(1, "Chevrolet", "Camaro", "2010"),
                Car(2, "Nissan", "370Z", "2005")]

        sampleList = []
        self.cb = wx.ComboBox(panel,
                              size=wx.DefaultSize,
                              choices=sampleList)
        self.widgetMaker(self.cb, cars)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.cb, 0, wx.ALL, 5)
        panel.SetSizer(sizer)

    #----------------------------------------------------------------------
    def widgetMaker(self, widget, objects):
        """"""
        for obj in objects:
            widget.Append(obj.make, obj)
        widget.Bind(wx.EVT_COMBOBOX, self.onSelect)

    #----------------------------------------------------------------------
    def onSelect(self, event):
        """"""
        print "You selected: " + self.cb.GetStringSelection()
        obj = self.cb.GetClientData(self.cb.GetSelection())
        text = """
        The object's attributes are:
        %s  %s    %s  %s

        """ % (obj.id, obj.make, obj.model, obj.year)
        print text

# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

希望对您有所帮助!

关于python - 如何创建带有值和文本节点的下拉菜单 - WXPython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18553967/

相关文章:

python - 如何创建和销毁wx.App?

python - 基准测试 Django 应用程序

python - 如何获取字符串中键的值,后跟另一个特定的键=值集

php - 下拉菜单不适用于日、月和年

jquery - 阻止 jQuery 选择也匹配的父级

javascript - Bootstrap,销毁元素的下拉菜单

python - 如何用opencv为python编写灰色(1 channel )图像

python - 行间隔的滚动差异

python - 我如何编写一个程序来单击Python中的特定链接

python - wxPython图像占用大量内存