Как печатать только синие символы в текстовом представлении - PullRequest
0 голосов
/ 28 марта 2020

Я хочу, чтобы символы печатались только синим цветом. Как это сделать?

Вот пример кода программы, который является фрагментом большей части программы.

Я был бы очень признателен за вашу помощь.

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()

1 Ответ

0 голосов
/ 30 марта 2020

Ваш обработчик 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...