如何在Python

时间:2017-01-05 14:56:28

标签: python wxpython

我是python中的新手,我想显示一个带有sqlite查询字符串列表的SingleChoiceDialog框,但是我做错了,框中的列表只显示了变量列表的最后一个值。 / p>

查询:

            sql = u"select person.name from person"
            c.execute(sql)
            for row in c.execute(sql):
                    z = list(row)

对话框:

        def whatusr(parent=None, message='', default_value=''):
                dlg = wx.SingleChoiceDialog(
                        self, "Who?", 'The Caption',
                        z,
                        wx.CHOICEDLG_STYLE
                        )
                if dlg.ShowModal() == wx.ID_OK:
                        print 'You selected: %s\n' % dlg.GetStringSelection()
                dlg.Destroy()

当我运行它时,对话框只显示列表的最后一个值,而不是所有列表。 我想这是因为对话框要我有其他形式的列表。 我的列表z = list(row)输出值为:[a], [b], [c], ..,但对话框可能需要此格式的值:[a,b,c, ..]。有人能帮我吗?感谢。

2 个答案:

答案 0 :(得分:0)

wx.SingleChoiceDialog窗口小部件确实需要您推测的[a,b,c, ..]形式的普通列表。你可能得到的是一个列表列表,小部件不知道如何正确显示。

我只想使用list comprehension从行中提取项目。这样的事情应该有效:

z = [item for item in row]

我希望这会有所帮助。

答案 1 :(得分:0)

实现此目的的一种简单方法是仅使用第一个元素(即item [0])从返回的sql语句创建列表。

import sqlite3
import wx
db = sqlite3.connect('/home/rolf/my.db',)
cur=db.cursor()
cur.execute('person.name from person')
stats = cur.fetchall()
def xApp():
    z=[]
    for i in stats:
        z.append(i[0])
    dlg = wx.SingleChoiceDialog(None,"Which","title",z,wx.CHOICEDLG_STYLE)
    if dlg.ShowModal() == wx.ID_OK:
        print 'You selected: %s\n' % dlg.GetStringSelection()
    dlg.Destroy()
x=wx.App()
xApp()
x.MainLoop()

或者您可以使用:

z = [item[0] for item in stats]
如迈克·德里斯科尔所提到的那样,你仍然只需要第一个元素