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()
選択したアイテムとそのすべての属性および値を取得するには、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)