2013-06-12 1 views
0

Я сделал программу, которая показывает четыре терминала в одном окне, но размер шрифта слишком велик. Вот мой код:Использование python, GTK + 3, Vte libs. Как изменить размер шрифта терминала?

#!/usr/bin/python shells.py 

from gi.repository import Gtk, Vte, Gdk 
from gi.repository import GLib 
import os 

class MainWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="shells") 
     self.resize(1000, 1000) 

     table = Gtk.Table(2, 2, True) 
     self.add(table) 

     palette = [Gdk.color_parse('red')] * 16 
     terminal1 = Vte.Terminal() 
     terminal2 = Vte.Terminal() 
     terminal3 = Vte.Terminal() 
     terminal4 = Vte.Terminal() 

     scrolledwindow1 = Gtk.ScrolledWindow() 
     scrolledwindow1.add(terminal1) 

     scrolledwindow2 = Gtk.ScrolledWindow() 
     scrolledwindow2.add(terminal2) 

     scrolledwindow3 = Gtk.ScrolledWindow() 
     scrolledwindow3.add(terminal3) 

     scrolledwindow4 = Gtk.ScrolledWindow() 
     scrolledwindow4.add(terminal4) 

     terminal1.fork_command_full(Vte.PtyFlags.DEFAULT, os.environ['HOME'], ["/bin /sh"], 
            [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None) 
     terminal2.fork_command_full(Vte.PtyFlags.DEFAULT, os.environ['HOME'], ["/bin/sh"], 
            [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None) 
     terminal3.fork_command_full(Vte.PtyFlags.DEFAULT, os.environ['HOME'], ["/bin/sh"], 
            [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None) 
     terminal4.fork_command_full(Vte.PtyFlags.DEFAULT, os.environ['HOME'], ["/bin/sh"], 
            [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None) 

     terminal1.set_colors(Gdk.color_parse('red'), Gdk.color_parse('black'), palette) 
     terminal2.set_colors(Gdk.color_parse('green'), Gdk.color_parse('black'), palette) 
     terminal3.set_colors(Gdk.color_parse('yellow'), Gdk.color_parse('black'), palette) 
     terminal4.set_colors(Gdk.color_parse('blue'), Gdk.color_parse('black'), palette) 

     table.attach(scrolledwindow1, 0, 1, 0, 1) 
     table.attach(scrolledwindow2, 1, 2, 0, 1) 
     table.attach(scrolledwindow3, 0, 1, 1, 2) 
     table.attach(scrolledwindow4, 1, 2, 1, 2) 

win = MainWindow() 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main() 

Согласно документации Vte set_font я использовал:

import pango 
font = pango.FontDescription() 
terminal1.set_font(font) 

И я получаю следующее сообщение об ошибке:

AttributeError: type object 'Context' has no attribute '__info__' 

Пример от переполнения стека вопрос: how to enable transparency in vte.Terminal

п я, в соответствии с этим Vte 'decrease-font-size' signal:

terminal1.connect('decrease-font-size', function, data) 
def function(): 
    print "press crtl -to decrease font-size" 

Ничего не происходит с этим. А остальные тоже не работают. Я также заметил, что я не могу изменить размер одного терминала с помощью:

terminal1.set_size(30, 29) 

Кажется ничего не меняет.

Для этих примеров я использовал для простоты только клемму 1. Также странно, что, когда я делаю «чистую» команду, она, похоже, перестраивает себя, и размер шрифта становится больше. Прошу прощения за странный английский. Это не мой родной язык, но я постараюсь изо всех сил. Когда дело доходит до программирования, у меня есть только опыт работы с python и связанными с ним библиотеками или модулями. Я использую версию Linux Debian в качестве ОС.

Greets

ответ

0

соединение к «понимают» сигнал Vte.Terminal, как только тогда создается Pango.FontDescription, то get_font() на терминале и set_size() на Pango.FontDescription возвращенного, что :

#!/usr/bin/env python3 


import os 

from gi.repository import GLib 
from gi.repository import Pango 
from gi.repository import Gdk 
from gi.repository import Gtk 
from gi.repository import Vte 


class MainWindow(Gtk.Window): 
    def __init__(self): 
     Gtk.Window.__init__(self, title="shells") 
     self.resize(1000, 1000) 

     table = Gtk.Table(2, 2, True) 
     self.add(table) 

     palette = [Gdk.color_parse('red')] * 16 
     terminal1 = Vte.Terminal() 
     terminal1.connect('realize', self.on_realize_terminal) 
     terminal2 = Vte.Terminal() 
     terminal2.connect('realize', self.on_realize_terminal) 
     terminal3 = Vte.Terminal() 
     terminal3.connect('realize', self.on_realize_terminal) 
     terminal4 = Vte.Terminal() 
     terminal4.connect('realize', self.on_realize_terminal) 

     scrolledwindow1 = Gtk.ScrolledWindow() 
     scrolledwindow1.add(terminal1) 

     scrolledwindow2 = Gtk.ScrolledWindow() 
     scrolledwindow2.add(terminal2) 

     scrolledwindow3 = Gtk.ScrolledWindow() 
     scrolledwindow3.add(terminal3) 

     scrolledwindow4 = Gtk.ScrolledWindow() 
     scrolledwindow4.add(terminal4) 

     terminal1.fork_command_full(Vte.PtyFlags.DEFAULT, os.environ['HOME'], ["/bin/sh"], 
            [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None) 
     terminal2.fork_command_full(Vte.PtyFlags.DEFAULT, os.environ['HOME'], ["/bin/sh"], 
            [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None) 
     terminal3.fork_command_full(Vte.PtyFlags.DEFAULT, os.environ['HOME'], ["/bin/sh"], 
            [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None) 
     terminal4.fork_command_full(Vte.PtyFlags.DEFAULT, os.environ['HOME'], ["/bin/sh"], 
            [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None) 

     terminal1.set_colors(Gdk.color_parse('red'), Gdk.color_parse('black'), palette) 
     terminal2.set_colors(Gdk.color_parse('green'), Gdk.color_parse('black'), palette) 
     terminal3.set_colors(Gdk.color_parse('yellow'), Gdk.color_parse('black'), palette) 
     terminal4.set_colors(Gdk.color_parse('blue'), Gdk.color_parse('black'), palette) 

     table.attach(scrolledwindow1, 0, 1, 0, 1) 
     table.attach(scrolledwindow2, 1, 2, 0, 1) 
     table.attach(scrolledwindow3, 0, 1, 1, 2) 
     table.attach(scrolledwindow4, 1, 2, 1, 2) 

    def on_realize_terminal(self, terminal): 
     font = terminal.get_font() 
     font.set_size(16 * Pango.SCALE) 


if __name__ == '__main__': 
    win = MainWindow() 
    win.connect("delete-event", Gtk.main_quit) 
    win.show_all() 
    Gtk.main() 
+1

Sry, но это не сработает. Также он работает с кодом его парня: http://stackoverflow.com/questions/11686510/how-to-enable-transparency-in-vte-terminal И ему не нужен сигнал реализации. Может быть, все как-то сломано из-за плохой компоновки и четырех терминалов одновременно? – JonnyPython

+0

Написал снова, работал, сделал. благодаря – JonnyPython

 Смежные вопросы

  • Нет связанных вопросов^_^