首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向treeview的每一行添加索引

向treeview的每一行添加索引
EN

Stack Overflow用户
提问于 2016-08-02 07:43:54
回答 1查看 170关注 0票数 0

这是我正在使用的treeview,用于显示来自多个来源的文本(使用打开的文件对话框等文件)。它还应该具有编辑行的能力。(请不要介意bookstore /= entries的大小,我已经批准他们让它变短了)

代码语言:javascript
运行
复制
class treeview():
    full_list = []
    booklist = []
    indxcount = 0
    bookstore = Gtk.ListStore(int, str, str, str, str, str, str, str,                            
                              str, str, str, str)
    viewstore = Gtk.ListStore(str, str)
    entries = ["Type", "Id", "Title", "Author", "Journal", "Year", "Publisher",
               "Page", "Address", "Annote", "Booktitle", "Chapter"]

    def __init__(self):
        self.cell = cell.cell_renderer()
        self.view = Gtk.TreeView(model=self.bookstore)
        for i, column_title in enumerate(["Type", "Key", "Title",
                                      "Author", "Journal", "Year"]):
            renderer = Gtk.CellRendererText()
            renderer.set_property("wrap-width", 300)
            if i > 3:
                renderer.set_property("wrap-width", 100)
            renderer.set_property("wrap-mode", 0)
            column = Gtk.TreeViewColumn(column_title, renderer, text=i+1)
            self.view.append_column(column)
            # column.clear()
            for cid in range(0, 6):
                column.set_sort_column_id(cid)

    def viewer(self, booklist, act=-1):
        for ref in booklist:
            lref = list(ref)
            treeview.indxcount += 1
            lref = list(ref)
            lref.insert(0, (treeview.indxcount))

            self.bookstore.append(lref)
            treeview().full_list.append(ref)


        self.current_filter_language = None

问题是,由于我人为地放置行索引,它提供了更多的问题然后解决了(例如,如果我重新打开另一个文件,treeview.indxcount = last indxcount of previously open files + 1 )。

但是由于它是从文件中打开的,所以我无法从gtk_tree_selection_get_selected_rows获得indx。那么,怎样才能得到索引呢?

另一个潜在的函数可能是GtkTreeCellDataFunc(),但我不知道如何使用,所以我没有管理它。

帮帮忙吧。

的回复: Hi,给出一个完整的例子有点棘手,因为它应该打开一个文件(包括一个文件打开的对话框和一个完整的窗口),这可能不是一个最小的例子。

但是,从某种意义上说,我的问题是treeview.indxcount += 1行。请允许我更详细地解释这个问题:

比如说,我从一个包含6个项的文件(所以,len(booklist)=6 )中读取数据。因此,在完成这个步骤之后,treeview.indxcount = 6

现在,考虑一下,我正在加载另一个这样的文件,它将覆盖现有的数据。但是,在这种情况下,treeview.indxcount将从7开始。我试着把treeview.indxcount = 0放进FileOpenDialog,但不知怎么的,这并没有影响观众。

因此,简单地说,我试图在加载数据时计算treeview中的行号。

我不知道这个解释是否能澄清问题。

EN

回答 1

Stack Overflow用户

发布于 2016-08-09 16:00:42

您的代码中存在一些问题。您的类名为treeview,但它不是treeview。如果像这样从Gtk.Treeview派生出来,可能会更好(不那么令人困惑):

代码语言:javascript
运行
复制
class treeview(Gtk.TreeView):
    def __init__(self):
        super(treeview, self).__init__()
        bookstore = Gtk.ListStore(int, str, str, str, str, str, str, str,                            
                                  str, str, str, str)
        self.set_model(self.bookstore)

        for i, column_title in enumerate(["Type", "Key", "Title",
                                  "Author", "Journal", "Year"]):
            renderer = Gtk.CellRendererText()
            renderer.set_property("wrap-width", 100 if i > 3 else 300)
            renderer.set_property("wrap-mode", 0)
            column = Gtk.TreeViewColumn(column_title, renderer, text=i)
            self.append_column(column)
            for cid in range(0, 6):
                column.set_sort_column_id(cid)
...

现在,self实际上是指treeview。然后,在方法viewer中递归调用textview(),创建类的新实例。这听起来很危险。

booklist的格式是什么?如果你把书单作为序列传递(例如。一个元组或列表列表),其中每个内部序列都是要在TreeView中显示的一行,那么(我认为)您不需要索引not。

你会得到这样的东西:

代码语言:javascript
运行
复制
tv = treeview()
tv.viewer([["1984", "Asimov"], 
           ["Tcl and Tk", "Welch"], 
           ["Linear systems", "Moriarty"]])

这只是一个部分的答案-但我不能真正格式化代码‘注释’。必要的话我会编辑的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38714554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档