Расширение на Ответ Брайана , поскольку вы унаследовали Treeview()
для своего MyTreeView()
класса, тогда сам класс является Treeview
и имеет все функции виджета Treeview
. При наследовании виджета Tkinter вы должны передать аргументы этого виджета конструктору __init__
, если вы хотите задать параметр виджета. Например, Treeview
виджет имеет эти (master=None, **kw)
аргументы, поэтому он выглядит как ...
class MyTreeView(ttk.Treeview):
def __init__(self, master=None, my_list=[], **kw):
super(MyTreeView, self).__init__(master=master, **kw)
Где my_list = []
- дополнительный аргумент, данный вами. Также я не дал аргумент my_column_headers
, потому что он может быть задан как column=my_column_headers
во время создания экземпляра класса, такого как tree = MyTreeView(root, my_list=list, columns= my_column_headers)
.
Также в строке self.bind("<Double-1>", lambda event : self.OnFeatureDoubleClick(event))
вам не нужно lambda
, поскольку обратный вызов bind
всегда передает событие в качестве параметра данной функции. lambda
необходим, если вы не хотите передавать event
в качестве параметра функции.
Я изменил ваш класс, я могу понять из приведенного кода.
class MyTreeView(ttk.Treeview):
def __init__(self, master=None, my_list=[], **kw):
super(MyTreeView, self).__init__(master=master, **kw)
# Level 1
PARENT="" # top level
INDEX = 1 # insert at end
i = 0
for thing in my_list:
self.insert(PARENT, INDEX, i, text=str(i), values=(thing))
self.bind("<Double-1>", self.OnFeatureDoubleClick)
def OnFeatureDoubleClick(self, event):
print ("MyTreeView.OnFeatureDoubleClick: self: " + str(self))
print ("MyTreeView.OnFeatureDoubleClick: event: " + str(event) + "\t" + str(event.x) + "\t" + str(event.y))
item = self.identify('item', event.x, event.y)
print("MyTreeView.OnFeatureDoubleClick: ", self.item(item,"text"))