У меня есть простой сценарий, использующий экземпляр ttk.Treeview, который я заполняю содержимым дерева файловой системы. Я хочу выполнить определенную операцию при щелчке по элементам (листья), поэтому я настроил обработчик следующим образом:
Код: Выделить всё
self.tree.tag_bind('#entry', '', self.onClick)
В методе onClick я просто распечатываю элемент, по которому щелкнули, вот так:
Код: Выделить всё
def onClick(self, event):
item_id = str(self.tree.focus())
print 'Selected item was %s' % item_id
item = self.tree.item(item_id)
flag = '#another_tag' in item['tags']
print ' flag = %s' % flag
Я обнаружил, что сообщения отстают от кликов на один. Таким образом, мой первый щелчок получает случайное значение (выглядит как корень дерева), а затем n-й щелчок распечатывает значения для (n-1)-го элемента, по которому был сделан щелчок.
Они вставлялись так:
Код: Выделить всё
tree.insert(parent_id, 'end', id, text=id, tags=['#entry'])
Кто-нибудь знает, это ошибка в Tkinter или я что-то делаю неправильно?
Похоже, это проблема как в Ubuntu Natty, так и в OS X Lion (с использованием предустановленных по умолчанию версий Python и Tkinter)
Подробнее здесь:
https://stackoverflow.com/questions/120 ... tree-focus