作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我正在使用 Python + Gtk3 中的 Vte 编写应用程序。 我无法更改所有颜色。 例如,对于前景颜色,我试过这段代码,但是文本颜色没有改变: class Shell(Gtk.Box):
我是一名优秀的程序员,十分优秀!