首页 > 解决方案 > 如何在textview中只打印蓝色字符

问题描述

我想让字符只打印成蓝色。怎么做?

这是示例程序代码,它是大部分程序的一个片段。

我将非常感谢您的帮助。

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

class TextViewWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="awesome gui")
        self.set_resizable(True)
        self.set_default_size(700, 550)
        self.grid = Gtk.Grid()
        self.add(self.grid)
        self.create_textview()
        self.buffer = []

    def create_textview(self):
        scrolledwindow = Gtk.ScrolledWindow()
        scrolledwindow.set_hexpand(True)
        scrolledwindow.set_vexpand(True)
        self.grid.attach(scrolledwindow, 0, 2, 80, 1)
        self.textview = Gtk.TextView()
        scrolledwindow.add(self.textview)

        self.textbuffer = self.textview.get_buffer()
        self.textview.set_editable(False)
        self.textview.set_cursor_visible(False)

        self.textview.connect("key-press-event", self.on_key_down)

    def on_key_down(self, widget, event, data=None):

        znak_p = event.string

        end_iter_m = self.textbuffer.get_iter_at_line_offset(1, 1)
        qwerty_tag = self.textbuffer.create_tag(None, editable=True, foreground="blue")
        self.textbuffer.insert_with_tags(end_iter_m, znak_p, qwerty_tag)

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

标签: pythongtk

解决方案


您的on_key_down处理程序错误:

  • 每次按键时都会创建一个匿名标签
  • 您使用的GtkTextTag:foreground属性字符串无效
  • 你没有从回调中返回一个值,告诉 GTK 你是否处理了事件(因此应该停止事件传播)。

GtkTextTag:foreground属性使用与函数相同的格式gdk_rgba_parse();如果你想要蓝色,你应该使用rgba(0.0, 0.0, 1.0, 1.0)而不是“蓝色”。

正确的处理程序是:

    def on_key_down(self, widget, event, data=None):
        znak_p = event.string
        end_iter_m = self.textbuffer.get
        self.textbuffer.insert_with_tags(end_iter_m, znak_p, self.qwerty_tag)
        return True

推荐阅读