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