我正在使用优秀的PyGI AIO (3.14.0)二进制文件在Windows上使用Gtk3和Clutter进行开发。到目前为止它一直很好用。但是,指针事件似乎没有到达GtkClutter.Embed小部件中的Clutter.Stage。这是代码:
import sys
from gi.repository import GtkClutter
GtkClutter.init(sys.argv)
from gi.repository import Clutter, Gdk, Gtk, GObject
def main():
win = Gtk.Window(Gtk.WindowType.TOPLEVEL)
# Works
#win.connect('button-press-event', lambda *args: sys.stdout.write("BP\n"))
#win.connect('button-release-event', lambda *args: sys.stdout.write("BR\n"))
#win.connect('motion-notify-event', lambda *args: sys.stdout.write("ME\n"))
embed = GtkClutter.Embed()
embed.set_size_request(800, 600)
# Works
#embed.connect('button-press-event', lambda *args: sys.stdout.write("BP\n"))
#embed.connect('button-release-event', lambda *args: sys.stdout.write("BR\n"))
#embed.connect('motion-notify-event', lambda *args: sys.stdout.write("ME\n"))
stage = embed.get_stage()
stage.set_reactive(True)
stage.set_size(800, 600)
stage.set_color(Clutter.Color.new(0, 128, 0, 255))
# Fails
stage.connect('button-press-event', lambda *args: sys.stdout.write("BP\n"))
stage.connect('button-release-event', lambda *args: sys.stdout.write("BR\n"))
stage.connect('motion-event', lambda *args: sys.stdout.write("ME\n"))
# Works (surprisingly...)
stage.connect('key-press-event', lambda *args: sys.stdout.write("KP\n"))
stage.connect('key-release-event', lambda *args: sys.stdout.write("KR\n"))
stage.show_all()
win.add(embed)
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
return 0
if __name__ == '__main__':
sys.exit(main())
以上代码是否正确?我想知道这是否是Windows特定问题。任何人都可以在另一个操作系统上重现这个问题吗?
答案 0 :(得分:2)
地图应用程序开发人员很久以前就收到了这样的报告。我建议他切换到gdk后端a.k.a
from gi.repository import Clutter
Clutter.set_windowing_backend(Clutter.WINDOWING_GDK)
注意:上面应该在其他杂乱的东西之前完成
它现在应该捕获事件但是仍然所有C示例都没有解决方法正常工作,所以我对它为什么不在绑定级别工作毫无头绪。我认为您的代码也已经与gtk-clutter-test.c一致。