54424


tkinter初心者です。tkinterのリストボックスから要素（項目）を選んで、選んだものだけを新しいリストとして作成したいと思っています。  
以下のコードはあるサイトから引用しましたが、これに加えて上記で挙げた方法を行いたいと思っております。

[code]

    from tkinter import *
    from tkinter import ttk
    
    #----------------------------------------
    #リストボックスを押した時の反応用関数
    def select_lb(event):
        for i in lb.curselection():
            print(str(i)+"番目を選択中")
        print("")
    #----------------------------------------
    
    tki = Tk()
    tki.title('test')
    
    
    #----------------------------------------
    #リストボックス
    listarray = ('項目1', '項目2', '項目3', '項目4', '項目5', '項目6', '項目7', '項目8', '項目9')
    txt = StringVar(value=listarray)
    lb= Listbox(tki, listvariable=txt,width=50,height=10)
    lb.bind('<<ListboxSelect>>', select_lb)
    lb.grid(row=0, column=1)
    lb.configure(selectmode="extended")
    #----------------------------------------
    
    #----------------------------------------
    #スクロールバー
    scrollbar = ttk.Scrollbar(tki,orient=VERTICAL,command=lb.yview)
    scrollbar.grid(row=0,column=2,sticky=(N,S))
    #----------------------------------------
    
    tki.mainloop()
    
[/code]

ここから`txt.get()`で取得しようと考えましたが、なぜか選択していないものも含めて全部取得してしまいます。  
希望としては、リストで選んだあとokボタンを押すことでリストを返すものにしたいと思っています。  
リストボックスで色々検索してみましたが、なかなか見つけられなくて困っています。そもそもリストボックスの目的が違うようでしたらご指摘ください。

ご助力いただければ幸いです。


CC BY-SA 4.0
2019-04-23T06:43:36.133
54417
2019-04-23T08:38:06.433
30590
question
python tkinter
tkinterで選択した要素を返してリストを作りたい


`txt.get()` ではなく、`lb.curselection()` と `lb.get()` を使います。  
以下の処理を反応用関数としてボタンを作成すれば、選択したものを取得出来るでしょう。  
`print(selected)` の部分を、別のリストボックス変数やグローバル変数などに代入するなり、何かの処理に置き換えれば良いでしょう。

[code]

    #----------------------------------------
    # OKボタンを押した時の反応用関数
    def ok_button():
        selected = []
        for i in lb.curselection():
            selected.append(lb.get(i,i)[0])
        print(selected)
    #----------------------------------------
    
    button = Button(tki, text="OK", command=ok_button)
    button.grid(row=1, column=0, columnspan=2)
    
[/code]


CC BY-SA 4.0
2019-04-23T08:07:34.493
54424
2019-04-23T08:38:06.433
2019-04-23T08:38:06.433
26370
26370
54417
answer