2010-09-25 20 views
9

Tkinter ile bir GUI oluşturuyorum ve GUI'nin büyük bir kısmı iki Treeview nesnesi. Bir öğe (yani bir dizin) iki kez tıklandığında nesnelerinin değiştirilmesine ihtiyacım var.Tkinter Treeview widget öğesinin öğelerini tıklamak için komut istemi?

Treeview öğeleri düğmelerdeyse, uygun işleve command ayarlayabilirdim. Ancak Treeview öğeleri için "on_click" davranışını oluşturmak için bir yol bulmakta sorun yaşıyorum.

Treeview seçeneği, yöntem, vb, belirli öğelere bir komutu bağlama ve bu komutu "on_click" komutunu yürütmemi sağlar?

cevap

16

Kullanıcı çift tıklatıldığında bir şey olmasını istiyorsanız, "<Double-1>" numaralı bağlantıya bir ciltleme ekleyin. Tek bir tıklama, seçimi belirlediğinden, geri aramada, neyin seçildiğini bulmak için widget'ı sorgulayabilirsiniz. Örneğin: çoklu elemanlar seçilir ve kullanıcı SHIFT+CLICK (en azından bir Mac) kullanan zaman

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() 
11

önceki çözüm başarısız olur.

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() 
: Burada

daha iyi bir çözümdür

İlgili konular