2015-12-16 1 views
0

Например у меня есть окно с виджетами для ноутбука, и в этом ноутбуке у меня есть две вкладки, каждая из которых содержит один виджет vte Идея, чтобы получить предварительный просмотр каждого ВТЭ виджеты (Вы знаете, как в терминологии) здесь является простым кодом, который я до сих пор:Как получить предварительный просмотр от детей в ноутбуке, как в возвышенном или терминологии

import gi 
import os 
gi.require_version('Gtk', '3.0') 
gi.require_version('Vte', '2.91') 
from gi.repository import Gtk 
from gi.repository import Vte 
from gi.repository import GLib 
from gi.repository import Gdk 
from gi.repository import GdkPixbuf 
win = Gtk.Window() 
win.connect('delete-event', Gtk.main_quit) 
notebook = Gtk.Notebook() 
win.add(notebook) 
directory = os.environ['HOME'] 
env=[] 
term1 = Vte.Terminal() 
term1.spawn_sync(Vte.PtyFlags.DEFAULT, directory, ["/bin/bash"], 
        env, GLib.SpawnFlags.CHILD_INHERITS_STDIN | GLib.SpawnFlags.SEARCH_PATH, 
        None, None,) 
term1.show() 
term2 = Vte.Terminal() 
term2.spawn_sync(Vte.PtyFlags.DEFAULT, directory, ["/bin/bash"], 
        env, GLib.SpawnFlags.CHILD_INHERITS_STDIN | GLib.SpawnFlags.SEARCH_PATH, 
        None, None,) 
term2.show() 
notebook.append_page(term1) 
notebook.append_page(term2) 
notebook.show() 
notebook.next_page() 

def manage_key_press_events_cb(widget, event): 
    keyval = event.keyval 
    if ((event.state & (Gdk.ModifierType.CONTROL_MASK|Gdk.ModifierType.SHIFT_MASK)) == (Gdk.ModifierType.CONTROL_MASK|Gdk.ModifierType.SHIFT_MASK)): 
    if keyval == Gdk.KEY_O: 
     for i in range(notebook.get_n_pages()): 
     child = notebook.get_nth_page(i) 
     child.get_window().show() 
     width = child.get_allocation().width 
     height = child.get_allocation().height 
     x = child.translate_coordinates(notebook,0,0)[0] 
     y = child.translate_coordinates(notebook,0,0)[1] 
     p = Gdk.pixbuf_get_from_window(child.get_window(), 0, 0, width, height) 
     p.savev(str(i) + ".png", "png",(),()) 
     return True 
    else: 
     return False 
    else: 
    return False 

win.show_all() 

win.connect('key-press-event', manage_key_press_events_cb) 
Gtk.main() 

в одну вкладке запускает Htop и в другом я запускаю поглядывая (приложения не имеет значения, они просто помогают мне to differenciate the previews)

Проблема, которую я не могу решить, заключается в том, что каждый предварительный просмотр представляет собой вкладку, сфокусированную в текущий момент. Что бы я ни делал, мне не нужно иметь предварительный просмотр вкладок , которые не являются текущими.

FYI Я использую python, чтобы дать вам простой рабочий пример, но сначала у меня возникла эта проблема с ruby ​​из проекта ruby-gnome2. Поэтому я предполагаю, что это не связано с python или ruby.

ответ

0

Реализация GtkNotebook не позволяет отображать/скрывать/рисовать свои дочерние элементы напрямую. Чтобы иметь pixbuf ребенка, он должен быть выбран в текущий момент.

Таким образом, идея заключается в цикле Повсеместно все Чайлдс из ноутбука и использовать «переключатель-страницу» событие для того, чтобы создать pixbuf: посмотреть здесь:

http://www.gtkforums.com/viewtopic.php?f=3&t=179132

и здесь

https://github.com/cedlemo/germinal
https://github.com/cedlemo/germinal/blob/master/bin/terminal_chooser.rb https://github.com/cedlemo/germinal/blob/master/bin/notebook.rb

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