0

1 つのウィンドウに 4 つの端末を表示するプログラムを作成しましたが、フォント サイズが大きすぎます。これが私のコードです:

#!/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__'

例は、スタック オーバーフローの質問からのものです: vte.Terminal で透明性を有効にする方法

次に、このVte 'decrease-font-size' シグナルに従って、次のように使用しました。

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

これでは何も起こりません。そして、残りも機能しません。また、次を使用して1つの端末のサイズを実際に変更できないことにも気付きました。

terminal1.set_size(30, 29)

何も変わらないようです。

これらの例では、簡単にするために端末 1 のみを使用しました。また、奇妙なことの1つは、「クリア」コマンドを実行すると、それ自体が再配置されたように見え、フォントサイズが大きくなることです。変な英語ですみません。母国語ではありませんが、頑張ります。プログラミングに関しては、Python と関連するライブラリまたはモジュールの経験しかありません。Linux Debian バージョンを OS として使用しています。

あいさつ

4

1 に答える 1

0

asのrealizeシグナルに接続してから、が作成され、端末で、それによって返された に接続します。Vte.TerminalPango.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()
于 2013-06-12T19:43:30.183 に答える