11

でセットアップされたリストボックスがありますselection='multiple'。次に、コードによって、ユーザーが選択したすべてのオプションのリストを取得しようとしますname.get(ACTIVE)。問題は、リストボックス GUI で強調表示したすべてのオプションを常に取得できるとは限らないことです。

1 つを強調表示すると、これが正しく表示されます。
2つ以上を(それぞれを1回クリックして)
強調表示すると、最後に選択した項目のみが返されます.

コードが強調表示されたものを元に戻すことを期待しています。

リストボックスを設定するコードは次のとおりです。

self.rightBT3 = Listbox(Frame1,selectmode='multiple',exportselection=0)

選択を取得するコードは次のとおりです。

selection = self.rightBT3.get(ACTIVE)

これは、アプリケーションが実際にどのように見えるかのスクリーンショットです。上部には、コンソールが 1 つの選択 (最後にクリックしたもの) のみが登録されていることがわかります。

ここに画像の説明を入力

4

4 に答える 4

11

Tkinter リストボックスで選択された項目のリストを取得する正しい方法はself.rightBT3.curselection()、選択された行のゼロから始まるインデックスを含むタプルを返す を使用することです。get()次に、これらのインデックスを使用して各行を実行できます。

(実際にテストしたわけではありませんが)

于 2013-01-16T15:52:07.573 に答える
10

上記の解決策は少し「わかりにくい」と思います。特に、技術を学んでいる、または python/tkinter を学んでいるプログラマーをここで扱っている場合。

私は、次のようなより説明的な解決策を考え出しました。これがあなたにとってより良いものになることを願っています。

#-*- coding: utf-8 -*-
# Python version 3.4
# The use of the ttk module is optional, you can use regular tkinter widgets

from tkinter import *
from tkinter import ttk

main = Tk()
main.title("Multiple Choice Listbox")
main.geometry("+50+150")
frame = ttk.Frame(main, padding=(3, 3, 12, 12))
frame.grid(column=0, row=0, sticky=(N, S, E, W))

valores = StringVar()
valores.set("Carro Coche Moto Bici Triciclo Patineta Patin Patines Lancha Patrullas")

lstbox = Listbox(frame, listvariable=valores, selectmode=MULTIPLE, width=20, height=10)
lstbox.grid(column=0, row=0, columnspan=2)

def select():
    reslist = list()
    seleccion = lstbox.curselection()
    for i in seleccion:
        entrada = lstbox.get(i)
        reslist.append(entrada)
    for val in reslist:
        print(val)

btn = ttk.Button(frame, text="Choices", command=select)
btn.grid(column=1, row=1)

main.mainloop()

ttk テーマのウィジェットの使用は完全にオプションであることに注意してください。通常の tkinter のウィジェットを使用できます。

于 2015-09-21T18:59:12.957 に答える