开发者

how to make multiline wx.ListBox

I开发者_JAVA技巧 need a ListBox to show a phone book.Then i need to show name in top and number in bottom in each list item like phone.how to bind the datas into listbox.

now i made a listbox with singleline as shown below

    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)

how to bind sqlite3 cursor with two columns to the listview

i need a wx.ListBox mouse click event(not EVT_LISTBOX because i need only mouse click event)


Use the HtmlListBox, here is a little example to get you started.

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()


You should rephrase your question, I don't know if I got this right.

If you only need to display the two lines in your ListBox, you could simply use a \n:

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

To get a 'click' Event, you cant set the style of your wx.ListBox to wx.LC_SINGLE_SEL and catch the selection event wx.EVT_LIST_ITEM_SELECTED

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜