如何制作多行wx.ListBox

时间:2011-07-01 09:28:32

标签: python wxpython

我需要一个ListBox来显示电话簿。然后我需要在每个列表项中显示名称在顶部和底部的数字,如phone.how,以将数据绑定到列表框中。

现在我用单行制作了一个列表框,如下所示

    cur.execute("select fname from tblsample1 order by fname")
    names = [str(item[0]) for item in cur.fetchall()]
    lvnames=wx.ListBox(panel,-1,(10,40),(210,180),names, wx.LB_SINGLE)

如何将带有两列的sqlite3游标绑定到listview

我需要一个wx.ListBox鼠标点击事件(不是EVT_LISTBOX  因为我只需要鼠标点击事件)

2 个答案:

答案 0 :(得分:3)

使用HtmlListBox,这是一个让您入门的小例子。

import wx


class PhoneNumbers(wx.HtmlListBox):
    def __init__(self, parent):
        wx.HtmlListBox.__init__(self, parent)
        self.data = [
            ("Foo", "3452-453"),
            ("Bar", "5672-346"),
        ]
        self.SetItemCount(len(self.data))

    def OnGetItem(self, n):
        return "<b>%s</b><br>%s" % self.data[n]

    def add_number(self, name, number):
        self.data.append((name, number))
        self.SetItemCount(len(self.data))
        self.Refresh()


class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, size=(200, 400))

        self.numbers = PhoneNumbers(self)
        self.contact_name = wx.TextCtrl(self)
        self.contact_number = wx.TextCtrl(self)
        self.add_btn = wx.Button(self, label="Add contact")

        self.Sizer = wx.BoxSizer(wx.VERTICAL)
        self.Sizer.Add(self.numbers, 1, wx.EXPAND)
        self.Sizer.Add(wx.SearchCtrl(self), 0, wx.EXPAND)
        self.Sizer.Add(wx.StaticText(self, label="Name"), 0, wx.TOP, 10)
        self.Sizer.Add(self.contact_name)
        self.Sizer.Add(wx.StaticText(self, label="Number"), 0, wx.TOP, 5)
        self.Sizer.Add(self.contact_number)
        self.Sizer.Add(self.add_btn, 0, wx.ALL, 10)

        self.numbers.Bind(wx.EVT_LISTBOX, self.OnSelectNumber)
        self.add_btn.Bind(wx.EVT_BUTTON, self.OnAddNumber)

    def OnSelectNumber(self, event):
        name, number = self.numbers.data[event.Selection]
        self.contact_name.Value = name
        self.contact_number.Value = number

    def OnAddNumber(self, event):
        self.numbers.add_number(
            self.contact_name.Value,
            self.contact_number.Value
        )


app = wx.PySimpleApp()
app.TopWindow = f = Frame()
f.Show()
app.MainLoop()

答案 1 :(得分:1)

你应该改写你的问题,我不知道我是否做对了。

如果您只需要在ListBox中显示两行,则只需使用\n

cur.execute("select fname,number from tblsample1 order by fname")
entries = [str(item[0])+'\n'+str(item[1]) for item in cur.fetchall()]

要获得“点击”活动,您无法将wx.ListBox的样式设置为wx.LC_SINGLE_SEL并抓住选择事件wx.EVT_LIST_ITEM_SELECTED