python - 如何在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()
解决方案
您的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
推荐阅读
- javascript - 只有当输入按特定顺序填写时,才能正确计算百分比
- mongodb - 集合 2 字段上的 Mongo 聚合过滤器
- javascript - 删除点击事件上的图表会产生空错误的“removeHoverStyle”
- r - 在列中按组填充整数范围
- r - 将列表列表转换回数据框列以用作行删除的条件
- javascript - 为什么 JS .map 和 .forEach 方法返回错误的数组长度?
- html - 为什么我不能重复使用“立即阅读”按钮的代码?
- java - 休眠 - 将项目存储在内存中的同一位置?
- r - glmmTMB 负二项式模型的置信区间
- c++ - 特征库 - Levenberg-Marquardt - 如何传递额外信息以最小化例程