2016-04-05 10 views
2

私はttk.TreeViewを複数列のListBoxとして使用し、テーブルとして送信するSQLデータを効果的に表示します。 SQLクエリを作成すると、ツリービューに照会されたデータが表示されます。クリックすると行が強調表示されるので、データを選択するオプションがあります。データが強調表示されるように行をクリックし、編集するデータが入ったポップアップウィンドウを作成する別のボタンをクリックすることは可能ですか?ツリービューからのデータの選択

私はSQLで作業しているので、データを選択するだけで済み、ツリービューテーブルではなくSQLテーブルから削除することができます。下のツリーは、いくつかのデータが選択されている例です。選択したデータだけを編集または削除するか、それとも何かに渡すことはできますか?

The tree

編集:

 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) 

私はトップレベルにオブジェクトを管理するためのフレームを変更し、その同じ場所(TOP1)ように、エントリウィジェットがどこに行くに変更。私は、ツリー内の項目をダブルクリックしたときに生成されるエラーメッセージは次のとおりです。私はself.exampleが開始コードの後半を削除すると

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' 

、コードが実際にやっていないようですToplevelを作成する以外のもの。

編集:

私は、コードのself.example行を削除し、データだけの正しい行が出力されるprint (selectedetails)を使用しています。

答えて

2

まず、あなたのツリーIVにイベントをバインドする必要があり、ダブルクリックを使用

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 

あなたは時にツリーをダブルクリックすると呼ばれるあなたのサブルーチンを作成する必要があり、次の(私の例のために、それはOnDoubleClickある)

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 

次に、この選択されたデータにアクセスするには、必要な字下げを持つ配列の名前を使用します(この例では選択されたものです)。次に、文字列変数を使用して、選択したデータでエントリを入力します。

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

最初の部分は間違いなく便利ですが、ダブルクリックの部分です。しかし、私がクリックすると、私のコードの後半に多くのエラーがあります。選択されたデータをバインドするようには見えません。それは行全体を選択したいからですか? – Coder101

+0

何が原因でエラーが生成され、エラーの名前をコピーして過去のものになる可能性がありますか?私の授業でそれを実行したときにすべてのコードに貼り付けなかったかもしれません。 skypeを使って話すことで問題を解決するコメント以上 – ryanmoir

+0

あなたのコードを追加して私の主な質問を編集します(私はそれを多少変更しました。おそらくそれは問題です)、生成されるエラーメッセージを表示します。 – Coder101

関連する問題