【问题标题】:Puting Gtk.Label in Gtk.TreeView row将 Gtk.Label 放入 Gtk.TreeView 行
【发布时间】:2020-08-23 16:58:45
【问题描述】:

我尝试使用以下示例将标记文本(可能包含斜体、粗体、颜色)放在 Gtk.TreeView 列中:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import os
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk


class CellRendererLabelWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Gtk.Label in Gtk.ListStore Example")


        # Creating the ListStore object
        self.liststore = Gtk.ListStore(str, Gtk.Label)

        # Making the ListStore Model
        label=Gtk.Label()
        label.set_markup("<b>baz</b> foo")
        self.liststore.append(["bar", label])

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

        # Preparing the first column only plain text
        renderer_text_0 = Gtk.CellRendererText()
        column_text_0 = Gtk.TreeViewColumn("Text", renderer_text_0, text=0)
        treeview.append_column(column_text_0)

        # Preparing the second column with label
        renderer_text_1 = Gtk.CellRendererText()
        column_text_1 = Gtk.TreeViewColumn("Label", renderer_text_1, text=1)
        treeview.append_column(column_text_1)


        self.add(treeview)


win = CellRendererLabelWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

我收到以下错误消息:

GtkLabelInGtkList.py:43: Warning: unable to set property 'text' of type 'gchararray' from value of type 'GtkLabel'
  win.show_all()
GtkLabelInGtkList.py:44: Warning: unable to set property 'text' of type 'gchararray' from value of type 'GtkLabel'
  Gtk.main()

以及如下窗口渲染:

如您所见,当我期待“baz foo”之类的内容时,“标签”列是空的。

正如错误信息所说,Gtk 尝试在GtkLabel 中找到属性text,但没有找到。因此,我将text 替换为label 以制作像这样column_text_1 = Gtk.TreeViewColumn("Label", renderer_text_1, label=1) 的行。但后来我收到以下错误:

(GtkLabelInGtkList.py:10013): Gtk-WARNING **: Cannot connect attribute 'label' for cell renderer class 'GtkCellRendererText' since attribute does not exist

那么将Label(或其他Gtk 的小部件)放入TreeView 的解决方案是什么?

【问题讨论】:

    标签: python gtk gtk3 pygtk gtktreeview


    【解决方案1】:

    不能将小部件放入 GtkTreeView,只能将单元格渲染器放入。

    如果要在树视图列中显示标记,可以使用 GtkCellRendererTextmarkup property 代替 text 属性:

    self.liststore = Gtk.ListStore(str, str)
    self.liststore.append(["bar", "<b>baz</b> foo"])
    
    # ...
    
    column_text_0 = Gtk.TreeViewColumn("Text", renderer_text_0, text=0)
    column_text_1 = Gtk.TreeViewColumn("Markup", renderer_text_1, markup=1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      相关资源
      最近更新 更多