2016-08-02 7 views
0

これは、多くのソース(開いているファイルダイアログなどを使用してファイル)からテキストを表示するために取り組んでいます。それはまた行を編集する能力を持っているはずです。 (bookstore /= entriesの大きさは、私はそれを短くするためにそれらをクリアしている場合は気にしないで下さい)ツリービューのすべての行にインデックスを追加します。

class treeview(): 
    full_list = [] 
    booklist = [] 
    indxcount = 0 
    bookstore = Gtk.ListStore(int, str, str, str, str, str, str, str,        
           str, str, str, str) 
    viewstore = Gtk.ListStore(str, str) 
    entries = ["Type", "Id", "Title", "Author", "Journal", "Year", "Publisher", 
       "Page", "Address", "Annote", "Booktitle", "Chapter"] 

    def __init__(self): 
     self.cell = cell.cell_renderer() 
     self.view = Gtk.TreeView(model=self.bookstore) 
     for i, column_title in enumerate(["Type", "Key", "Title", 
             "Author", "Journal", "Year"]): 
      renderer = Gtk.CellRendererText() 
      renderer.set_property("wrap-width", 300) 
      if i > 3: 
       renderer.set_property("wrap-width", 100) 
      renderer.set_property("wrap-mode", 0) 
      column = Gtk.TreeViewColumn(column_title, renderer, text=i+1) 
      self.view.append_column(column) 
      # column.clear() 
      for cid in range(0, 6): 
       column.set_sort_column_id(cid) 

    def viewer(self, booklist, act=-1): 
     for ref in booklist: 
      lref = list(ref) 
      treeview.indxcount += 1 
      lref = list(ref) 
      lref.insert(0, (treeview.indxcount)) 

      self.bookstore.append(lref) 
      treeview().full_list.append(ref) 


     self.current_filter_language = None 

問題は、私は、人為的にそのその後、より多くの問題を与えるソリューションを行インデックスを入れておりますので、(例えば場合別のファイル、treeview.indxcount = last indxcount of previously open files + 1)を再度開きます。

しかし、ファイルから開くので、私はgtk_tree_selection_get_selected_rowsからindxを得ることができません。では、どのようにインデックスを取得できますか?

もう1つの潜在的な機能はおそらくGtkTreeCellDataFunc()ですが、使用方法はわかりませんので、私はそれを管理していません。

助けてください。 jcoppensの返答に

こんにちは、 完全な例を置くが、それはファイルを開く必要があるとして、少しトリッキーですおそらくこれ以上の最小限の例になる、(つまり、ファイルオープンな対話と完全なウィンドウが含まれます)。

しかし、並べ替えでは、私の問題はtreeview.indxcount += 1行です。問題を詳細に説明できるようにしてください:

私は6項目のファイルからデータを読みます(len(booklist)=6)。したがって、このステップを完了した後、treeview.indxcount = 6

ここで、既存のデータを上書きする別のファイルを読み込んでいるとします。しかし、treeview.indxcountはその場合7から始まります。私はをFileOpenDialogに入れようとしましたが、どういうわけか、それは視聴者に影響しません。

簡単に言うと、データがロードされている間に、ツリービューの行番号を計算しようとしています。

この説明が問題を解決しているかどうかはわかりません。

+0

私には問題があるとは必ずしも言えません。操作の簡単な例が役に立ちます。Python属性だけを使うことを検討しましたか? – jcoppens

答えて

0

コードにいくつかの問題があります。クラスはtreeviewと呼ばれますが、ツリービューではありません。あなたはこのようなGtk.Treeviewからそれを引き出す場合はたぶん、より良い(より少ない混乱):

class treeview(Gtk.TreeView): 
    def __init__(self): 
     super(treeview, self).__init__() 
     bookstore = Gtk.ListStore(int, str, str, str, str, str, str, str,        
            str, str, str, str) 
     self.set_model(self.bookstore) 

     for i, column_title in enumerate(["Type", "Key", "Title", 
            "Author", "Journal", "Year"]): 
      renderer = Gtk.CellRendererText() 
      renderer.set_property("wrap-width", 100 if i > 3 else 300) 
      renderer.set_property("wrap-mode", 0) 
      column = Gtk.TreeViewColumn(column_title, renderer, text=i) 
      self.append_column(column) 
      for cid in range(0, 6): 
       column.set_sort_column_id(cid) 
... 

は今、selfは実際にツリービューを参照します。次に、メソッドviewerで、textview()を再帰的に呼び出して、クラスの新しいインスタンスを作成します。それは危険なようだ。

booklistの形式は何ですか?ブックリストをシーケンスのシーケンス(例えば、タプルのタプル、リストのリスト)として渡すと、各内側のシーケンスがTreeViewに表示される行である場合、indexcntは必要ありません。

次のようなものだろう:

tv = treeview() 
tv.viewer([["1984", "Asimov"], 
      ["Tcl and Tk", "Welch"], 
      ["Linear systems", "Moriarty"]]) 

これは部分的にしか答えですが - が、私はコメント '内の書式コードは本当にすることはできません。必要に応じて編集します。

関連する問題