2016-04-05 55 views
2

Bir ttk.TreeView öğesini, tablo olarak gönderdiğim sql verilerini etkin bir şekilde görüntüleyen çok kanallı bir ListBox olarak kullanıyorum. Bir sql sorgusu oluşturduğumda ve treeview sorgulanan verileri görüntülediğinde, tıklatıldığında satırın vurgulandığı gibi, verileri seçme seçeneği vardır. Verileri vurgulamak için bir satırı tıklamak ve sonra da düzenlenecek veriyi içeren bir açılır pencere oluşturan başka bir düğmeyi tıklatmam mümkün mü?Ağaç görünümünden veri seçme

SQL ile çalıştığım için seçilecek verilere ihtiyacım var ve bunu ağaç görünümü tablosundan değil SQL tablosundan silmek için kullanabilirim. Aşağıda, seçilen bazı verilerin bir örneğini içeren ağaç var. Sadece düzenlenecek veya silinecek veya seçilebilecek bir veriyi iletebilir miyim?

The tree

Düzenleme:

 def OnDoubleClick(self,event): 
      top1=Toplevel(height=600,width=500) 
      #frame is just for managing objects not absolutely needed but i think it is good 
      #to use frame when using object so i have kept it in 
      curItem = self.tree.focus() 
      contents =(self.tree.item(curItem)) 
      selectedetails = contents['values'] 
      #this is what you would use to when presenting the selectedd information 


      self.example_var = StringVar() 
      self.example_var.set(selectedetails[1]) 
      self.example_txt = Entry(top1,textvariable=self.example_var) 
      self.example.grid(row=1,column=1) 

Ben üst düzey olarak içine nesneleri yönetmek için çerçeveyi değiştirdi ve giriş Widget böylece nereye gittiğini değiştiğini onun aynı yerde (top1). Ben ağaçta bir öğenin üzerine çift tıkladığınızda üretilen hata iletisi şudur: Ben self.example başlar Kodun ikinci yarısını sildiğinizde

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python33\lib\tkinter\__init__.py", line 1489, in __call__ 
     return self.func(*args) 
    File "C:\Users\lukeh\Documents\a\test for double click.py", line 278, in OnDoubleClick 
     self.example.grid(row=1,column=1) 
AttributeError: 'MultiColumnListbox' object has no attribute 'example' 

, kod aslında yapmak görünmüyor Toplevel'i yaratmaktan başka bir şey.

Düzenleme:

ben kod self.example satırları silin ve sadece doğru veri hattı çıktısı verilir print (selectedetails) kullanmak

.

cevap

2

ilk siz (benim örneğin o OnDoubleClick olan)

zaman ağaç çift tıklama adı verilecek senin altprogramı yapmak gerekir yanındaki

self.tree.bind("<Double-1>",lambda event :self.OnDoubleClick(event)) 
#note the OnDoubleClick is the name of the sub that python will look for when tree 
#double clicked 

çift tıklayın kullanılan ağacınızı iv bir olay bağlamak gerekir

def OnDoubleClick(self, event): 
     frame3 = tk.LabelFrame(self, text="frame1", width=300, height=130, bd=5) 
     frame3.grid(row=2, column=0, columnspan=3, padx=8) 
     #frame is just for managing objects not absolutely needed but i think it is good 
     #to use frame when using object so i have kept it in 
     curItem = self.tree.focus() 
     contents =(self.tree.item(curItem)) 
     selectedetails = contents['values'] 
     #this is what you would use to when presenting the selectedd information 

Ardından bu seçili verilere erişmek için dizinin adını istediğiniz girinti ile kullanın (bu örnekte, selectedetails). Daha sonra seçilen veriler ile entrys doldurmak için dize değişkenleri kullanıyorum.

self.example_var = StringVar() 
self.example_var.set(selectedetails[1]) 
self.example_txt = Entry(frame3,textvariable=self.example_var) 
self.example_txt.grid(row=1,column=1) 
+0

İlk bölüm kesinlikle kullanışlıdır, çift tıklama kısmı. Ancak, tıkladığımda, kodunuzun ikinci yarısında benim için çok fazla hata var. Seçilen verileri bağlamak görünmüyor. Bu, tüm satırın seçilmesini istediğimden mi? – Coder101

+0

üretilen hata nedir ve belki de benim kod üzerinde çalıştığı zaman ben tüm kodda yapıştırmak olmayabilir hata adını geçmiş olabilir iyiydi - ihtiyacınız olacağını düşünüyorsanız skype – ryanmoir

+0

üzerinden konuşarak sorunu çözmek için bir yorum daha fazla Kodunuzu ekleyerek ana sorumu düzenleyeceğim (bazılarını değiştirdim, belki de sorun) ve üretilen hata mesajını göstereceğim. – Coder101