python - 如何从不同的模块访问树视图内容?
问题描述
我在不同的模块中有两个类,每个都是 gtk.TreeView/gtk.ListStore。双击第一个树视图(目录列表)中的行后,程序应根据双击的行在另一个树视图(也是目录列表)中显示一些内容。
文件_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)
文件_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)
文件_3.py
class start_app():
def _init_(self):
containers(imported classes from modules)
如何从第二个树视图(B 类)访问第一个树视图(A 类)中的行位置?(我尝试了不同的方法)我会为进一步搜索提供提示,不需要固定代码。该代码在一个类/一个模块中时有效。
解决方案
您不应该从第二类访问树视图中的行位置。相反,您应该连接到一个信号,该信号表明用户选择已更改。有两种方法可以做到这一点。下面的代码是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); }
树选择的
"changed"
. 您可以GtkTreeSelection
从 TreeView 获取。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 小部件中使用的东西。但是您还需要一种方法来匹配两个列表中的项目。
推荐阅读
- symfony - 导出导入的宏
- javascript - 单击下一个/上一个链接时如何关闭菜单?
- c# - Datagrid 视图 - 无法对数据进行排序
- sql - 我应该在哪里输入 DISTINCT?
- python - 如何从pyspark中的另一列中找到一列的顶级层次结构?
- python - getLayerNames() 和 getUnconnecteddOutLayers() 函数的工作和输出是什么?
- asp.net - Sockets.receive 停止接收,但仍有数据传入
- angular - 无法访问子组件
- python - 我需要使用 Robot Framework 从 YAML 文件中获取值
- video-recording - Agora IO云录制停止功能获取uploadStatus unknow和code 435