2017-01-05 12 views
0

私はPythonでかなり新しいです.Sqliteクエリの文字列のリストを表示するSingleChoiceDialogボックスを表示したいのですが、何か問題があります。変数リストの値の正しくwx.SingleChoiceをPythonで使用する方法

クエリ:

  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, ..]。誰か助けてくれますか?ありがとう。

答えて

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] 

マイク・ドリスコルが言及していますが、まだ最初の要素だけ

+0

Thxをを必要とするよう! z = [] i for stats: z.append(i [0]) 私のために働きました。 – jailolous

0

あなたが推測したように、wx.SingleChoiceDialogウィジェットは実際に[a,b,c, ..]の形式で通常のリストを必要とします。おそらくあなたが得ているものはリストのリストであり、ウィジェットはそれを正しく表示する方法を知らない。

list comprehensionを使用して、行からアイテムを抽出します。このようなものはうまくいくはずです:

z = [item for item in row] 

私はこれが役立つことを望みます。

関連する問題