gpt4 book ai didi

python - 为什么方法 set_color_foreground 及其同伴 set_color_XXX 在 Vte(Python - Gtk3)中不起作用?

转载 作者:行者123 更新时间:2023-11-28 17:48:23 25 4
gpt4 key购买 nike

我正在使用 Python + Gtk3 中的 Vte 编写应用程序。
我无法更改所有颜色。

例如,对于前景颜色,我试过这段代码,但是文本颜色没有改变:

class Shell(Gtk.Box):
def __init__(self,on_close_button_cb,path = ""):
super(Shell,self).__init__(orientation=Gtk.Orientation.VERTICAL)

v = Vte.Terminal()
v.set_color_foreground(Gdk.Color(65535,0,0))
v.set_size(80,80)
v.show_all()

if path == "":
path = os.environ['HOME']

self.vpid = v.fork_command_full( Vte.PtyFlags.DEFAULT, path, ["/bin/bash"], [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None,)
self.pack_start(v,True,True,0)

self.set_visible(True)

最佳答案

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

关于python - 为什么方法 set_color_foreground 及其同伴 set_color_XXX 在 Vte(Python - Gtk3)中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14459877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com