Изменение цвета виджета Vte.Terminal() должно быть выполнено после реализации виджета терминала. В противном случае изменения цвета, выполненные с помощью методов set_colors(), set_color_foreground() и т. д., не учитываются.
В следующем рабочем примере предлагаются два способа сделать это. В примере используется цветовая палитра и set_colors(), но то же самое верно, если вы захотите использовать set_color_foreground() или другие методы set_color_*(). Лично я предпочитаю вариант 1:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, Vte, GLib
palette_components = [
(0, 0x0707, 0x3636, 0x4242), # background
(0, 0xdcdc, 0x3232, 0x2f2f),
(0, 0x8585, 0x9999, 0x0000),
(0, 0xb5b5, 0x8989, 0x0000),
(0, 0x2626, 0x8b8b, 0xd2d2),
(0, 0xd3d3, 0x3636, 0x8282),
(0, 0x2a2a, 0xa1a1, 0x9898),
(0, 0xeeee, 0xe8e8, 0xd5d5), # foreground
(0, 0x0000, 0x2b2b, 0x3636),
(0, 0xcbcb, 0x4b4b, 0x1616),
(0, 0x5858, 0x6e6e, 0x7575),
(0, 0x6565, 0x7b7b, 0x8383),
(0, 0x8383, 0x9494, 0x9696),
(0, 0x6c6c, 0x7171, 0xc4c4),
(0, 0x9393, 0xa1a1, 0xa1a1),
(0, 0xfdfd, 0xf6f6, 0xe3e3)
]
palette = []
for components in palette_components:
color = Gdk.Color(components[1], components[2], components[3])
palette.append(color)
def terminal_realize_cb(terminal):
terminal.set_colors(None, None, palette)
if __name__ == '__main__':
window = Gtk.Window()
window.connect('delete-event', Gtk.main_quit)
terminal = Vte.Terminal()
# Option 1: connect to the terminal widget's realize event
# and call it's set_colors() method there
terminal.connect('realize', terminal_realize_cb)
terminal.fork_command_full(Vte.PtyFlags.DEFAULT,
None,
['/bin/bash'],
[],
GLib.SpawnFlags.DO_NOT_REAP_CHILD,
None,
None)
window.add(terminal)
window.show_all()
# Option 2: call the terminal's set_colors() method
# after the window has been shown (which indirectly
# realizes the terminal widget)
#terminal.set_colors(None, None, palette)
Gtk.main()
person
dieterv
schedule
27.08.2013