AttributeError:“ ListCtrl”对象没有属性“插入”

时间:2019-05-11 18:56:23

标签: python sqlite wxpython

我想在listctrl中列出我的银行,但出现此错误,有人可以帮助我吗?

我只尝试了我所知道的方法,找不到有关如何纠正错误的信息。

import wx
import sqlite3

class MyForm(wx.Frame):

   db_name = 'banco.db'

  def __init__(self):
    wx.Frame.__init__(self, None, wx.ID_ANY, "List Control Tutorial")

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

    self.list_ctrl = wx.ListCtrl(panel, size=(-1,100),
                     style=wx.LC_REPORT
                     |wx.BORDER_SUNKEN
                     )
    self.list_ctrl.InsertColumn(0, 'User')
    self.list_ctrl.InsertColumn(1, 'Senha')
    #self.list_ctrl.InsertColumn(2, 'Location', width=125)

    #btn = wx.Button(panel, label="Add Line")
    #btn2 = wx.Button(panel, label="Get Data")
    #btn.Bind(wx.EVT_BUTTON, self.add_line)
    #btn2.Bind(wx.EVT_BUTTON, self.get_data)

    sizer = wx.BoxSizer(wx.VERTICAL)
    sizer.Add(self.list_ctrl, 0, wx.ALL|wx.EXPAND, 5)
    #sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
    #sizer.Add(btn2, 0, wx.ALL|wx.CENTER, 5)
    panel.SetSizer(sizer)

    self.get_users()

def run_query (self, query, parameters=()):
    with sqlite3.connect(self.db_name) as conn:
        cursor = conn.cursor()
        result = cursor.execute(query, parameters)
        conn.commit()
    return result

def get_users(self):
    # Analisando dados
    query = 'SELECT * FROM users'
    db_rows= self.run_query(query)
    # Preenchimento de dados
    for row in db_rows:
        self.list_ctrl.InsertItem(row[0],row[1],row[2])

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

我希望有人可以帮助我,因为我不知道该怎么办。

2 个答案:

答案 0 :(得分:1)

在这种情况下,您几乎可以肯定想要ListCtrl.Append()
如:

self.list_ctrl.Append((row[0],row[1]))

答案 1 :(得分:0)

如错误消息所述,

wx.ListCtrl对象没有.insert()方法。 ListCtrl不是Python列表。您可能需要.Append().InsertItem()。更多详细信息here

.Append()的文档说

  

Append(self, entry)   将项目追加到列表控件。输入参数应该是一个序列,每一列都有一个项目

在这里可能不清楚 item wx.ListItem对象的实例。但是我确实也向您推荐了.InsertItem(),这很清楚。 wxPython的学习曲线非常陡峭,即使对于既有Python经验又有其他GUI框架经验的程序员而言,处理这样的微小差距都是曲线的一部分。

您的控件有2列(或没有注释的3列),因此entry需要传递序列,即由2组成的列表或元组(或3)wx.ListItem个对象。如果您不知道该怎么做,那么建议您研究wxPython随附的演示应用程序,或者看看wxGlade,它将为您构建wx对象。

我不知道您打算如何使用此控件,但是请记住,它是一个功能极其强大且复杂的控件,具有各种大小的可选图标以及单列或多列显示选项。如果您不需要这些功能,最好改用wx.grid.Grid