如何从笔记本中的孩子预览,如崇高或术语

时间:2015-12-16 10:51:49

标签: gtk3 pygobject

例如我有一个带有笔记本小部件的窗口,在这个笔记本中我有两个选项卡,每个小部件包含一个vte小部件 想要获得每个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,在另一个标签中我启动了一眼(应用程序并不重要,它们只是帮助我区分预览)

我无法解决的问题是每个预览代表当前关注的标签。无论我做什么我都无法预览 标签不是当前标签。

仅供参考我使用python来为您提供一个简单的工作示例但最初我从ruby-gnome2项目中遇到ruby问题。所以我猜这与python或ruby无关。

1 个答案:

答案 0 :(得分:0)

GtkNotebook实现不允许直接显示/隐藏/绘制其子项。为了拥有一个孩子的pixbuf,它必须是当前选中的。

因此,我们的想法是循环使用笔记本电脑的所有孩子并使用" switch-page" event为了生成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