gpt4 book ai didi

python - 仅在 Gtk.TreeView 中将某些行设为粗体

转载 作者:行者123 更新时间:2023-11-30 22:16:52 24 4
gpt4 key购买 nike

我想通过将(行中一列的)文本设为粗体来显示行的状态已读未读或不是。

行(或模型中的数据)的状态可以是模型的一部分或其他位置。我现在很灵活。

如何根据基础(动态)数据(在本例中为值 1)将特定单元格的文本设为粗体?

#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class View(Gtk.TreeView):
def __init__(self, model):
Gtk.TreeView.__init__(self, model)
col = Gtk.TreeViewColumn('Text',
Gtk.CellRendererText(),
text=0)
self.append_column(col)
# bold text
# Gtk.CellRendererText(weight_set=True, weight=700),


class Model(Gtk.ListStore):
def __init__(self):
Gtk.ListStore.__init__(self, str, int)
self.append(['foo 1', 0])
self.append(['foo 2', 1]) # bold
self.append(['foo 3', 0])
self.append(['foo 4', 0])
self.append(['foo 5', 1]) # bold

class Window(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.set_default_size(100, 200)

# model & view
self.model = Model()
self.view = View(self.model)

# layout
self.layout = Gtk.Grid()
self.add(self.layout)
self.layout.attach(self.view, 0, 0, 1, 2)

self.connect('destroy', Gtk.main_quit)
self.show_all()

if __name__ == '__main__':
win = Window()
Gtk.main()

最佳答案

正如 Gtk 中经常出现的那样,这非常非常简单,只是不太明显。您确实需要知道在哪里查找并仔细阅读相关文档。

class View(Gtk.TreeView):
def __init__(self, model):
Gtk.TreeView.__init__(self, model)
renderer = Gtk.CellRendererText()
col = Gtk.TreeViewColumn(
'Text', renderer, text=0, weight_set=True)
col.set_cell_data_func(renderer, datafunc)
self.append_column(col)

第一个键是TreeViewColumn.set_cell_data_func method 。这允许您设置一个拦截函数,您可以使用该函数在渲染单元格之前修改单元格的属性。这是我写的一个示例,它可以满足您的要求:

def datafunc(col, renderer, model, titer, data):
val = model.get_value(titer, 1)

if val:
renderer.set_property("weight", 700)

如您所见,它还接收所涉及的 TreeViewColumnCellRendererTreeModelTreeIter作为自定义数据,我已经省略了。

第一步是获取当前列的值。为此,我们为模型提供树迭代器(它保存“当前行”,有点)和我们想要的列 ID(在本例中为第二列,1)。

其余部分非常简单,我们使用该值来决定是否需要在 CellRenderer 上设置“权重”属性。

您在这里使用了 700,但为了清楚起见,我建议您使用 Pango.Weight.BOLD。当然,这需要 from gi.repository import Pango 。

关于python - 仅在 Gtk.TreeView 中将某些行设为粗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49836499/

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