Python 如何制作多行wx.ListBox

Python 如何制作多行wx.ListBox,python,wxpython,Python,Wxpython,我需要一个列表框来显示电话簿。然后我需要在每个列表项(如电话)的顶部显示姓名,底部显示号码。如何将数据绑定到列表框中 现在我用单线制作了一个列表框,如下所示 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),name

我需要一个列表框来显示电话簿。然后我需要在每个列表项(如电话)的顶部显示姓名,底部显示号码。如何将数据绑定到列表框中

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

    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
因为我只需要鼠标点击事件)

你应该重新表述你的问题,我不知道我是否答对了

如果只需要在
列表框中显示这两行
,只需使用
\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\u SINGLE\u SEL
,并捕获选择事件
wx.EVT\u LIST\u项目\u SELECTED

,您应该重新表述您的问题,我不知道我是否正确

如果只需要在
列表框中显示这两行
,只需使用
\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\u SINGLE\u SEL
,并捕获选择事件
wx.EVT\u LIST\u ITEM\u SELECTED
,下面是一个小示例,让您开始

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()
导入wx
类别电话号码(wx.htmlistbox):
定义初始化(自身,父级):
wx.HtmlListBox.\uuuuuu init\uuuuuuuuuuuux(自,父)
self.data=[
(“Foo”、“3452-453”),
(“酒吧”、“5672-346”),
]
self.SetItemCount(len(self.data))
定义OnGetItem(自身,n):
返回“%s
%s”%self.data[n] def add_编号(自身、姓名、编号): self.data.append((名称、编号)) self.SetItemCount(len(self.data)) self.Refresh() 类框架(wx.Frame): 定义初始化(自): wx.Frame.\uuuu init\uuuuux(self,None,size=(200400)) self.numbers=电话号码(self) self.contact_name=wx.TextCtrl(self) self.contact_number=wx.TextCtrl(self) self.add_btn=wx.按钮(self,label=“添加联系人”) self.Sizer=wx.BoxSizer(wx.VERTICAL) self.Sizer.Add(self.number,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\u name) self.Sizer.Add(wx.StaticText(self,label=“Number”),0,wx.TOP,5) self.Sizer.Add(self.contact_号码) self.Sizer.Add(self.Add_btn,0,wx.ALL,10) self.number.Bind(wx.EVT_列表框,self.OnSelectNumber) self.add_btn.Bind(wx.EVT_按钮,self.OnAddNumber) def OnSelectNumber(自身、事件): name,number=self.numbers.data[event.Selection] self.contact_name.Value=姓名 self.contact_number.Value=编号 def OnAddNumber(自身、事件): self.number.add_number( self.contact_name.Value, self.contact_number.Value ) app=wx.PySimpleApp() app.TopWindow=f=Frame() f、 Show() app.MainLoop()
使用,下面是一个小示例,让您开始学习

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()
导入wx
类别电话号码(wx.htmlistbox):
定义初始化(自身,父级):
wx.HtmlListBox.\uuuuuu init\uuuuuuuuuuuux(自,父)
self.data=[
(“Foo”、“3452-453”),
(“酒吧”、“5672-346”),
]
self.SetItemCount(len(self.data))
定义OnGetItem(自身,n):
返回“%s
%s”%self.data[n] def add_编号(自身、姓名、编号): self.data.append((名称、编号)) self.SetItemCount(len(self.data)) self.Refresh() 类框架(wx.Frame): 定义初始化(自): wx.Frame.\uuuu init\uuuuux(self,None,size=(200400)) self.numbers=电话号码(self) self.contact_name=wx.TextCtrl(self) self.contact_number=wx.TextCtrl(self) self.add_btn=wx.按钮(self,label=“添加联系人”) self.Sizer=wx.BoxSizer(wx.VERTICAL) self.Sizer.Add(self.number,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\u name) self.Sizer.Add(wx.StaticText(self,label=“Number”),0,wx.TOP,5) self.Sizer.Add(self.contact_号码) self.Sizer.Add(self.Add_btn,0,wx.ALL,10) self.number.Bind(wx.EVT_列表框,self.OnSelectNumber) self.add_btn.Bind(wx.EVT_按钮,self.OnAddNumber) def OnSelectNumber(自身、事件): name,number=self.numbers.data[event.Selection] self.contact_name.Value=姓名 self.contact_number.Value=编号 def OnAddNumber(自身、事件): self.number.add_number( self.contact_name.Value, self.contact_number.Value ) app=wx.PySimpleApp() app.TopWindow=f=Frame() f、 Show() app.MainLoop()
我需要fname以粗体字母显示,并且应该大于数字。
谢谢
然后您应该使用Toni Ruza提到的
HtmlListBox
。看一下演示,看起来很有希望。我需要fname以粗体字母显示,并且应该大于数字。
谢谢你
然后你应该使用Toni Ruza提到的
HtmlListBox
。查看演示,看起来很有希望。如何将两个TextCtrl添加到HtmlListBox?您不能使用列表框进行编辑,请查看wxGrid。如果您想在列表框之外添加控件,请使用大小调整器。不能在列表框中添加任何控件。如果你在你的问题中添加一个你想完成什么的草图,我会为你写一些代码。我需要一个列表视图。在每个列表中,应该有粗体的姓名,下一行应该有手机的电话号码。我正在编写一个类似电话簿的程序。谢谢你,你什么都没说我不知道。在您的问题中添加一张图片,说明您希望UI看起来像什么。如何将两个TextCtrl添加到HtmlListBox?您不能使用列表框进行编辑,请查看wxGrid。如果您想在列表框之外添加控件