Ich habe ein einfaches Skript, das eine ttk.Treeview-Instanz verwendet, die ich mit den Inhalten eines Dateisystembaums fülle.
Ich möchte eine bestimmte Operation ausführen, wenn auf (Blatt-)Elemente geklickt wird, also habe ich einen Handler wie folgt konfiguriert:
Code: Select all
self.tree.tag_bind('#entry', '', self.onClick)
In der Methode onClick drucke ich einfach das Element aus, auf das geklickt wurde, etwa so:
Code: Select all
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
Ich stelle fest, dass die Nachrichten den Klicks um eins hinterherhinken. Mein erster Klick erhält also einen zufälligen Wert (sieht aus wie die Wurzel des Baums), und dann druckt der n-te Klick die Werte für das (n-1)-te Element aus, auf das geklickt wurde.
Sie wurden wie folgt eingefügt:
Code: Select all
tree.insert(parent_id, 'end', id, text=id, tags=['#entry'])
Weiß jemand, ob das ein Fehler in Tkinter ist oder etwas, was ich falsch mache?
Dies scheint sowohl unter Ubuntu Natty als auch unter OS X Lion (unter Verwendung der standardmäßig vorinstallierten Versionen von Python und Tkinter) ein Problem zu sein.