web-dev-qa-db-ja.com

python tkinterツリーは選択されたアイテムの値を取得します

python 3.4の小さなtkinterツリープログラムから始めています。

選択した行の最初の値を返すで止まっています。 4つの列を持つ複数の行があり、アイテムを左クリックすると関数が呼び出されます。

tree.bind('<Button-1>', selectItem)

関数:

def selectItem(a):
    curItem = tree.focus()
    print(curItem, a)

これは私にこのようなものを与えます:

I003 <tkinter.Event object at 0x0179D130>

選択したアイテムが正しく識別されたようです。行の最初の値を取得する方法だけが必要です。

ツリー作成:

from tkinter import *
from tkinter import ttk

def selectItem():
    pass

root = Tk()
tree = ttk.Treeview(root, columns=("size", "modified"))
tree["columns"] = ("date", "time", "loc")

tree.column("date", width=65)
tree.column("time", width=40)
tree.column("loc", width=100)

tree.heading("date", text="Date")
tree.heading("time", text="Time")
tree.heading("loc", text="Loc")
tree.bind('<Button-1>', selectItem)

tree.insert("","end",text = "Name",values = ("Date","Time","Loc"))

tree.grid()
root.mainloop()
11
samtun

選択したアイテムとそのすべての属性および値を取得するには、itemメソッドを使用できます。

def selectItem(a):
    curItem = tree.focus()
    print tree.item(curItem)

これによりディクショナリが出力され、そこから個々の値を簡単に取得できます。

{'text': 'Name', 'image': '', 'values': [u'Date', u'Time', u'Loc'], 'open': 0, 'tags': ''}

また、コールバックが実行されることにも注意してくださいbeforeツリー内のフォーカスが変更されました。つまり、新しいアイテムをクリックする前にwasが選択されたアイテムを取得します。これを解決する1つの方法は、代わりにイベントタイプButtonReleaseを使用することです。

tree.bind('<ButtonRelease-1>', selectItem)
33
tobias_k