如何在Python中正确使用wx.SingleChoice

如何在Python中正确使用wx.SingleChoice,python,wxpython,Python,Wxpython,我是python新手,我想显示一个SingleChoiceDialog框,其中包含来自sqlite查询的字符串列表,但我做了一些错误的事情,框中的列表只显示变量列表的最后一个值 查询: sql = u"select person.name from person" c.execute(sql) for row in c.execute(sql): z = list(row) 该对话框

我是python新手,我想显示一个SingleChoiceDialog框,其中包含来自sqlite查询的字符串列表,但我做了一些错误的事情,框中的列表只显示变量列表的最后一个值

查询:

            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、..
。有人能帮我吗?谢谢。

正如您所猜测的那样,
wx.SingleChoiceDialog
小部件确实需要一个正常的列表,格式为
[a,b,c,…]
。您可能得到的是一个列表列表,而小部件不知道如何正确显示它

我将只使用一个从行中提取项目。像这样的方法应该会奏效:

z = [item for item in row]

我希望这会有所帮助。

实现这一点的一个简单方法是仅使用第一个元素(即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]

正如Mike Driscoll所提到的,但您仍然只需要第一个元素

Thx!z=[]对于stats中的i:z.append(i[0])为我工作。