通过单击GtkTreeView的任何列标题,我想打开一个带有选择项的弹出菜单,用户可以在运行时添加或删除列。 下面我有一个普通的GtkTreeView的例子。如何向其添加此功能?
#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class TreeModelSort(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.set_default_size(200, -1)
self.connect("destroy", Gtk.main_quit)
liststore = Gtk.ListStore(str)
liststore.append(["Mark"])
liststore.append(["Chris"])
liststore.append(["Tim"])
liststore.append(["David"])
liststore.append(["Keith"])
liststore.append(["Mark"])
treemodelsort = Gtk.TreeModelSort(liststore)
treemodelsort.set_sort_column_id(0, Gtk.SortType.ASCENDING)
treeview = Gtk.TreeView()
treeview.set_model(treemodelsort)
self.add(treeview)
cellrenderertext = Gtk.CellRendererText()
treeviewcolumn = Gtk.TreeViewColumn("Name", cellrenderertext, text=0)
treeview.append_column(treeviewcolumn)
window = TreeModelSort()
window.show_all()
Gtk.main()
答案 0 :(得分:0)
猜想我对OP做出响应还为时已晚,但这可能会在整个SEO中帮助其他人。
目前,GTK3仍是最常用的版本,而GTK4仍在开发中。至此,GTK + 不不支持通过第一手方法“实时”添加列。也就是说,在使用给定数量的列类型进行初始化之后,它不支持在树视图模型(在您的情况下为GtkListStore)中添加列,但是您可以在GtkTreeViewColumn
的{{1}}对象中插入GtkTreeView
对象任何时候。如GtkListStore
的GTK C参考页中所述,函数gtk_list_store_set_column_types()
:
此函数主要用于继承自的GObject GtkListStore,并且仅应在构造新的 GtkListStore。添加一行后,或 GtkTreeModel接口上的方法被调用。
您可以创建具有旧类型和新列类型的新列表存储,复制行数据,然后调用treeview方法使用该列表存储。
在C语言中,我利用了以下功能:g_object_set_data()
,g_object_get_data()
,gtk_list_store_newv()
,您可以阅读并学习它们的用途以及在哪里可能有用。不要忘记用适当的渲染器包装新的GtkTreeViewColumn
并设置其属性(列数)。