gpt4 book ai didi

gtk - GJS/GTK 为什么我不能替换 gtk TreeView 模型(列)?

转载 作者:行者123 更新时间:2023-12-04 15:47:19 27 4
gpt4 key购买 nike

我从一个空表开始(只有一列的列表存储)

beginning state with empty table

我希望用户能够导入 CSV 文件并显示内容。导入文件有效,确实显示了 CSV 数据,但保留了原始列(标题为“无数据”)。我该如何摆脱它?

Table with retained "No Data" column

我已经尝试删除 TreeView 元素甚至容器(但是当我这样做时我无法让它们再次显示...

我在 gtk 文档中看到替换 treeView.set_model(listStore) 应该完全替换现有的模型和列,但它似乎没有...

我现在正在做的是:

this._listStore = new Gtk.ListStore();

let coltypes = [GObject.TYPE_STRING];
this._listStore.set_column_types(coltypes);

// Create the treeview
this._treeView = new Gtk.TreeView({
expand: true
});

this._treeView.set_model(this._listStore);
// Create a cell renderer for when bold text is needed
let bold = new Gtk.CellRendererText({
weight: Pango.Weight.BOLD
});

// Create a cell renderer for normal text
let normal = new Gtk.CellRendererText();

// Create the columns for the address book
let defCol = new Gtk.TreeViewColumn({
title: "No Data"
});

// Pack the cell renderers into the columns
defCol.pack_start(bold, true);

// Set each column to pull text from the TreeView's model
defCol.add_attribute(bold, "text", 0);

// Insert the columns into the treeview
this._treeView.insert_column(defCol, 0);

然后,当 csv 文件上传时,我尝试用这样的东西更新表格:

this._listStore = new Gtk.ListStore();
// this._treeView.add(this._listStore);

let coltypes = [];
this.data.headers.forEach((h) => {

coltypes.push(GObject.TYPE_STRING);

});

print(coltypes);
this._listStore.set_column_types(coltypes);

// Replace the treeview

this._treeView.set_model(this._listStore);
/*
this._treeView = new Gtk.TreeView ({
expand: true,
model: this._listStore });
*/
// Create cell renderers
let normal = new Gtk.CellRendererText();
let bold = new Gtk.CellRendererText({
weight: Pango.Weight.BOLD
});

// Create the columns for the address book

for (k = 0; k < this.data.headers.length; k++) {
print('***key is : ' + k + ', val is : ' + this.data.headers[k] + ' of type : ' + typeof(this.data.headers[k]));

// let col=k;
this[`col_${k}`] = new Gtk.TreeViewColumn({
title: this.data.headers[k]
});
this[`col_${k}`].pack_start(normal, true);
if (k == 0) {
this[`col_${k}`].add_attribute(normal, "text", k);
} else {
this[`col_${k}`].add_attribute(normal, "text", k);
}
try {
this._treeView.insert_column(this[`col_${k}`], k);
} catch (err) {
print(err);
}

}

// Put the data in the table
let i;
for (i = 0; i < this.data.csva.length; i++) {

let row = this.data.csva[i];
print('trying to push : ' + row[0].toString());
print('... the data is of type : ' + typeof(row[1]));
let iter = this._listStore.append();

// this._listStore.set (iter, [0, 1, 2],
// [contact[0].toString(), contact[1].toString(), contact[2].toString()]);

this._listStore.set(iter, Object.keys(this.data.headers), row);

}

为什么那个最初的专栏还在那里?我该如何摆脱它?

在此先感谢您的帮助或指点。

最佳答案

你需要的是Gtk.TreeView.remove_column() .在 Python 中,这将是:

for column in this._treeView.get_columns():
this._treeView.remove_column(column)

每次在从 CSV 中添加列之前需要删除 TreeView 中的所有列时,您当然会这样做。

关于gtk - GJS/GTK 为什么我不能替换 gtk TreeView 模型(列)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55194231/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com