如何从不同模块访问树视图内容?
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.
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);
}
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 小部件中使用的东西。但是您还需要一种方法来匹配两个列表中的项目。
我在不同的模块中有两个 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.
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); }
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 小部件中使用的东西。但是您还需要一种方法来匹配两个列表中的项目。