ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 用户搜索Gtk.TreeView中的折叠行

2019-07-03 08:45:30  阅读:217  来源: 互联网

标签:python treeview gtk


如何进行交互式搜索(通过按Ctrl-f或/调用搜索)来迭代Gtk.TreeView的折叠行?

例如,如果我想在以下代码中首先搜索“四分之二”而不扩展“第四行”:

from gi.repository import Gtk

class Main(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Recursive Search")

        self.set_default_size(200, 200)

        self.treestore = Gtk.TreeStore(str, str)

        treeiter = self.treestore.append(None, ["Row One", ""])
        self.treestore.append(treeiter, ["Row Two", "First in One"])
        self.treestore.append(treeiter, ["Row Tree", "Second in One"])

        treeiter = self.treestore.append(None, ["Row Four", ""])
        self.treestore.append(treeiter, ["Row Five", "First in Four"])
        self.treestore.append(treeiter, ["Row Six", "Second in Four"])

        treeiter = self.treestore.append(None, ["Row Seven", ""])
        self.treestore.append(treeiter, ["Row Eight", "First in Seven"])
        self.treestore.append(treeiter, ["Row Nine", "Second in Seven"])

        treeview = Gtk.TreeView(model=self.treestore)

        renderer_text = Gtk.CellRendererText()
        column_text = Gtk.TreeViewColumn(cell_renderer=renderer_text, text=0)
        treeview.append_column(column_text)
        column_text = Gtk.TreeViewColumn(cell_renderer=renderer_text, text=1)
        treeview.append_column(column_text)

        treeview.set_search_column(1)

        treeview.set_headers_visible(False)

        self.add(treeview)

win = Main()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

解决方法:

您可以使用Gtk.Treeview.set_search_equal_func():

    def __init__(self):
        ...
        treeview.set_search_equal_func(self.search_function)
        self.treeview = treeview

    def search_function(self, model, column, key, rowiter):
        row = model[rowiter]
        if key.lower() in list(row)[column-1].lower():
            return False # Search matches

        # Search in child rows.  If one of the rows matches, expand the row so that it will be open in later checks.
        for inner in row.iterchildren():
            if key.lower() in list(inner)[column-1].lower():
                self.treeview.expand_to_path(row.path)
                break
        else:
             self.treeview.collapse_row(row.path)

        return True # Search does not match

我会推荐gnome.org用于Gtk的文档.它没有所有最新的更新,但它具有许多Gtk类和函数的易于阅读和易于查找的文档.

标签:python,treeview,gtk
来源: https://codeday.me/bug/20190703/1364857.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有