我想在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()
我希望有人可以帮助我,因为我不知道该怎么办。
答案 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
。