web-dev-qa-db-ja.com

Tkinter Treeviewウィジェットのアイテムをクリックするためのコマンド?

私はTkinterでGUIを作成していますが、GUIの大部分は2つのTreeviewオブジェクトです。アイテム(つまりディレクトリ)が2回クリックされたの場合、Treeviewオブジェクトの内容を変更にする必要があります。

Treeviewアイテムがボタンの場合、commandを適切な関数に設定することができます。しかし、Treeviewアイテムの"on_click"動作を作成する方法を見つけるのに問題があります。

コマンドを特定のアイテムにバインドしてそのコマンドを実行できるTreeviewオプション、メソッドなどはどれですか"on_click"

18
Rafe Kettler

ユーザーがダブルクリックしたときに何かが発生するようにしたい場合は、"<Double-1>"にバインディングを追加します。シングルクリックで選択が設定されるため、コールバックでウィジェットにクエリを実行して、何が選択されているかを確認できます。例えば:

import tkinter as tk
from tkinter import ttk

class App:
    def __init__(self):
        self.root = tk.Tk()
        self.tree = ttk.Treeview()
        self.tree.pack()
        for i in range(10):
            self.tree.insert("", "end", text="Item %s" % i)
        self.tree.bind("<Double-1>", self.OnDoubleClick)
        self.root.mainloop()

    def OnDoubleClick(self, event):
        item = self.tree.selection()[0]
        print("you clicked on", self.tree.item(item,"text"))

if __name__ == "__main__":
    app = App()
31
Bryan Oakley

複数の要素が選択され、ユーザーがSHIFT+CLICKを使用すると(少なくともMacでは)、前の解決策は失敗します。

より良い解決策は次のとおりです。

import tkinter as tk
import tkinter.ttk as ttk

class App:
    def __init__(self):
        self.root = tk.Tk()
        self.tree = ttk.Treeview()
        self.tree.pack()
        for i in range(10):
            self.tree.insert("", "end", text="Item %s" % i)
        self.tree.bind("<Double-1>", self.OnDoubleClick)
        self.root.mainloop()

    def OnDoubleClick(self, event):
        item = self.tree.identify('item',event.x,event.y)
        print("you clicked on", self.tree.item(item,"text"))

if __name__ == "__main__":
    app = App()
20
Csaba

私はこれが古いことを知っていますが、このコードはツリービューで複数の選択されたアイテムも印刷します。

def on_double_click(self, event):
    item = self.tree.selection()
    for i in item:
        print("you clicked on", self.tree.item(i, "values")[0])
2