28

Listbox現在選択されているアイテムを印刷しようとしていました。たとえば、アイテム「one」を選択すると「one」が出力され、アイテム「two」を選択すると「two」などが出力されます。以下は私が試したことです。

from Tkinter import*
root=Tk()
sizex = 600
sizey = 400
posx  = 40
posy  = 20
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))
itemsforlistbox=['one','two','three','four','five','six','seven']

def CurSelet(evt):
    value=str((mylistbox.get(ACTIVE)))
    print value

mylistbox=Listbox(root,width=60,height=10,font=('times',13))
mylistbox.bind('<<ListboxSelect>>',CurSelet)
mylistbox.place(x=32,y=90)

for items in itemsforlistbox:
    mylistbox.insert(END,items)
root.mainloop()

私の問題は、リストボックスでアイテムを選択するたびに、以前に選択したアイテムが実際に印刷されることです.たとえば、リストで「2」というアイテムを選択すると、「1」が印刷されます. より明確にするために、以下を参照してください

  1. 「one」という項目を選択すると、「one」が出力されました
  2. アイテム「two」を選択すると、「one」が再び出力されます
  3. 「three」という項目を選択すると、「two」などが出力されます...

何か不足していますか?get(ACTIVE)または、仕組みを誤解しましたか?

4

5 に答える 5

46

アイテムをクリックした後、つまりListboxSelectメソッドが戻った後、アイテムはアクティブになります。したがって、このクリックの前にアクティブだったものはすべて印刷されます (つまり、通常、最後にクリックしたもの)。

また、「選択済み」を何度も参照していることを考えると、アクティブな値ではなく、選択した値が必要だと思うので、それを求めるべきです。

selectmode=SINGLEまたは(デフォルト、あなたが持っているもの)リストボックスを備えたリストBROWSEボックスの場合、これらの両方を簡単に修正できます。これを変更するだけです:

mylistbox.get(ACTIVE)

に:

mylistbox.get(mylistbox.curselection())

MULTIPLEまたはを処理する必要がある場合EXTENDED、もちろん、正確に 1 ではなく 0 から 7 までの選択肢があるため、次のようにする必要があります。

values = [mylistbox.get(idx) for idx in mylistbox.curselection()]
print ', '.join(values)

私たちがそれに取り組んでいる間、なぜあなたがやっているのかstr((mylistbox.get(ACTIVE)))、あるいはstr(mylistbox.get(ACTIVE)). mylistbox.get単一のインデックスを使用した結果は、挿入したものと同じ文字列になります。

于 2013-03-28T01:25:18.527 に答える
10

これは私にとってはうまくいくようです:

mylistbox.get(ANCHOR)

コードに基づいて、現在のアイテムが出力されます。

于 2016-11-06T11:04:25.053 に答える
3

これを使用できます。リスト ボックスは必要ありません。したがって、複数のリスト ボックスがある場合は、任意のリスト ボックスから値を取得します。

from tkinter import*
root=Tk()
sizex = 600
sizey = 400
posx  = 40
posy  = 20
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))
itemsforlistbox=['one','two','three','four','five','six','seven']

def CurSelet(event):
    widget = event.widget
    selection=widget.curselection()
    picked = widget.get(selection[1])
    print(picked)

mylistbox=Listbox(root,width=60,height=10,font=('times',13))
mylistbox.bind('<<ListboxSelect>>',CurSelet)
mylistbox.place(x=32,y=90)

for items in itemsforlistbox:
    mylistbox.insert(END,items)
root.mainloop()
于 2017-02-19T23:18:23.010 に答える