我遇到了Gtk.Socket和鼠标事件的问题。我在Gtk.Socket中没有收到任何鼠标事件信号。
当我创建Gtk.Socket并将一些支持XEMBED协议的应用程序嵌入其中时(例如rxvt-unicode),我希望能够在套接字上挂钩鼠标事件(用于焦点更改,弹出菜单等)。但是Gtk.Socket本身并没有收到任何鼠标事件。
我是GTK(实际上也是X11)世界的新手。所以我不确定如何将事件分发到Windows。我几乎可以肯定,这个嵌入式窗口会吃掉所有鼠标事件并且不会将它们发送给它们的父节点(在我的例子中是Gtk.Socket)。是否有可能以某种方式破解它?
这是一个简短的例子: (我删除了我试图获得按钮按下事件的所有内容),以保持简短)。
#!/usr/bin/python
from gi.repository import GdkX11, Gtk, Gdk
from subprocess import Popen
class MainWindow(Gtk.Window):
def __init__(self, size_x, size_y):
super(self.__class__, self).__init__()
self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
self.resize(size_x, size_y)
self.connect('delete-event', Gtk.main_quit)
self.default_structure()
def default_structure(self):
child1 = TerminalWindow()
child2 = TerminalWindow()
layout = Gtk.HBox()
layout.pack_start(child1, True, True, 0)
layout.pack_start(child2, True, True, 0)
self.add(layout)
class TerminalWindow(Gtk.Socket):
def __init__(self):
super(self.__class__, self).__init__()
self.connect('realize', self.on_realize)
self.connect('unrealize', Gtk.main_quit)
def on_realize(self, *args):
self.inner_process = Popen(['urxvt', '-embed', str(self.get_id()), '-pe', '-tabbed'])
if __name__ == "__main__":
win = MainWindow(800, 300)
win.show_all()
Gtk.main()