如何从不同模块访问树视图内容?

How to access treeview content from different module?

我在不同的模块中有两个 classes,每个都是一个 gtk.TreeView/gtk.ListStore。在第一个树视图(目录列表)中双击行后,程序应根据双击的行在另一个树视图(也是目录列表)中显示一些内容。

file_1.py

class A():
  def _init_(self):
    ...
    #this content (catalogs_1_list) is fixed to display
    #not using self.catalogs_1, etc.
    catalogs_1.set_model(catalogs_1_list)

file_2.py

class B(don't want inheriting A):
  def _init_(self):
    ...
    #this content (catalogs_2_list) should be changing depending on double-clicked row in tree view from class A
    #not using self.catalogs_2, etc.
    catalogs_2.set_model(catalogs_2_list)

file_3.py

class start_app():
  def _init_(self):
    containers(imported classes from modules)

如何从第二个树视图 (class B) 访问第一个树视图 (class A) 中的行位置? (我尝试过不同的方法)我会很感激进一步搜索的提示,不需要固定的代码。该代码在一个 class/one 模块中时有效。

您不应从第二个 class 开始访问树视图中的行位置。相反,您应该连接到一个信号,该信号表明用户选择已更改。有两种方法可以做到。下面的代码是 C 但很容易将其转换为 python.

  1. TreeView 的 "row-activated".

    void
    row_activated (GtkTreeView       *tree_view,
                   GtkTreePath       *path,
                   GtkTreeViewColumn *column,
                   gpointer           user_data)
    {
      GtkTreeIter iter;
      GtkTreeModel *model;
      gchar *id;
    
      model = gtk_tree_view_get_model (tree_view);
    
      if (!gtk_tree_model_get_iter (model, &iter, path))
       return;
    
      gtk_tree_model_get (model, &iter, ID_COL, &id, -1);
    }
    
  2. TreeSelection 的 "changed"。您可以从 TreeView 获取GtkTreeSelection

    static void
    changed (GtkTreeSelection *select,
             gpointer          udata)
    {
      GtkTreeIter iter;
      GtkTreeModel *model;
      gchar *id;
    
      if (!gtk_tree_selection_get_selected (select, &model, &iter))
        return;
    
      gtk_tree_model_get (model, &iter, ID_COL, &id, -1);
    }
    

ID_COL 是我在 TreeView 小部件中使用的东西。但是您还需要一种方法来匹配两个列表中的项目。