我在不同的模块中有两个类,每个类都是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)
如何从第二个树视图(类B)访问第一个树视图(类A)中的行位置? (我尝试过不同的方法)我希望进一步搜索的提示,不需要固定的代码。该代码在一个类/一个模块中有效。
答案 0 :(得分:0)
您不应从第二类访问树状视图中的行位置。相反,您应该连接到一个信号,该信号指示用户选择已更改。有两种方法可以做到这一点。下面的代码是C
,但是很容易将其转换为python。
TreeView的“行激活”。
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小部件中使用的东西。但是,您还需要一种方法来匹配两个列表中的项目。