【问题标题】:Key but not mouse event received in pygame display embedded in GTK+ widget在 GTK+ 小部件中嵌入的 pygame 显示中收到键但未收到鼠标事件
【发布时间】:2015-01-20 02:21:07
【问题描述】:

我在 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

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

有什么想法吗?

【问题讨论】:

    标签: python-2.7 pygame pygtk


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多