在 GTK+ 小部件中嵌入的 pygame 显示中收到键而不是鼠标事件

Key but not mouse event received in pygame display embedded in GTK+ widget

我正在 GTK 小部件中嵌入 pygame 显示,以实现游戏原型的调试控制。

看来我不得不使用 PyGTK 来处理游戏的输入。我的回调接收到 gtk 按键事件,但按钮事件从未成功。

class Dashboard():
[...]
self.drawingarea_game = gtk.DrawingArea()
self.drawingarea_game.set_flags(gtk.CAN_DEFAULT | gtk.CAN_FOCUS | gtk.SENSITIVE | gtk.PARENT_SENSITIVE)
gobject.timeout_add(60, game.test_loop)
self.win.show_all()
self.drawingarea_game.grab_focus()
self.drawingarea_game.connect("button-press-event", game.mousepress)
self.drawingarea_game.connect("key-press-event", game.keypress)
gtk.main()


class Game():
[...]
def keypress(self, widget, event):
    Error.log(event.keyval)
    if event.keyval == 100: #d
        self.SCREEN_POSITION_X = -30
    if event.keyval == 97:  #a
        self.SCREEN_POSITION_X = 0
    if event.keyval == 115: #s
        self.SCREEN_POSITION_Y = -30
    if event.keyval == 119: #w
        self.SCREEN_POSITION_Y = 0
    return True

def mousepress(self, widget, event):
    Error.log(event.button)

我还尝试检查 pygame 事件,以防它以某种方式被劫持,但也没有报告任何内容:

class Game():
[...]
def test_loop(self):
for event in pygame.event.get():
    if event.type == pygame.MOUSEBUTTONDOWN:
        print(event)

绘图区是这样嵌套的:Window -> HBox -> VBox

我在 window 的其他地方有几个按钮可以正常接收点击。

有什么想法吗?

鼠标事件必须显式为绘图区域声明,显然与击键事件相反。添加后有效:

self.drawingarea_game.set_events(gtk.gdk.BUTTON_PRESS_MASK)