Windows에서 Gtk3 및 클러 터를 사용하여 개발할 때 우수한 PyGI AIO (3.14.0) 바이너리를 사용하고 있습니다. 지금까지 그것은 위대한 일을 해왔습니다. 그러나 포인터 이벤트가 GtkClutter.Embed 위젯 내부의 Clutter.Stage에 도달하지 않는 문제가있는 것으로 보입니다. 다음은 코드입니다.GtkClutter - Stutter가 포인터 이벤트를받지 못함
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 관련 문제인지 궁금합니다. 아무도 다른 OS에서 문제를 재현 할 수 있습니까?
콘솔에서 경고를 받고 있습니까? Clutter가 디버그 지원이 가능하도록 컴파일 된 경우,'CLUTTER_DEBUG = all' 환경 변수를 export하고 어딘가에 붙여 넣을 수 있습니까? – ebassi
불행히도 이러한 바이너리 (PyGI AIO)는 디버그 지원이 활성화되어 컴파일되지 않았습니다. CLUTTER_SHOW_FPS를 사용하여 프레임 속도를 인쇄했지만 CLUTTER_DEBUG를 설정해도 추가 출력이 생성되지 않았습니다. – kloffy