如何在Python中正确使用wx.SingleChoice
How to correctly use wx.SingleChoice in Python
我是 python 的新手,我想显示一个带有来自 sqlite 查询的字符串列表的 SingleChoiceDialog 框,但我做错了,框中的列表只显示了最后一个值变量列表。
查询:
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, ..]
形式的普通列表。您可能得到的是一个列表列表,而小部件不知道如何正确显示它。
我只想使用 list comprehension 从行中提取项目。这样的事情应该有效:
z = [item for item in row]
希望对您有所帮助。
实现此目的的一种简单方法是从返回的 sql 语句创建您的列表,仅使用第一个元素,即 item[0].
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 所述,但您仍然只需要第一个元素
我是 python 的新手,我想显示一个带有来自 sqlite 查询的字符串列表的 SingleChoiceDialog 框,但我做错了,框中的列表只显示了最后一个值变量列表。
查询:
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, ..]
形式的普通列表。您可能得到的是一个列表列表,而小部件不知道如何正确显示它。
我只想使用 list comprehension 从行中提取项目。这样的事情应该有效:
z = [item for item in row]
希望对您有所帮助。
实现此目的的一种简单方法是从返回的 sql 语句创建您的列表,仅使用第一个元素,即 item[0].
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 所述,但您仍然只需要第一个元素