0

gphoto2 を使用してカメラを制御する Python プログラムを作成したので、フォトブースを作成できます。ユーザーに入力用のキーボードまたはマウスを提供する代わりに、xin-mo コントローラーを購入したので、シンプルなアーケード スタイルのボタン インターフェイス (写真を撮る、写真を拒否する、写真を受け入れるなど) を提供できます。

Python プログラムは Tkinter を使用して記述されており、evdev を使用して xin-mo から入力イベントを読み取ります。私が xin-mo イベントに使用しているコードは次のようなものです:-

while True:

  for ev in device.read():
    print("Take photo")

それは機能し、ボタンを押すと何かをすることができます。

私が理解できないのは、どうすれば evdev と Tkinter を連携させることができるかということです。私が見つけたものから、メインループを呼び出して GUI をレンダリングする必要があります...しかし、メインループに入ったら、xin-mo コントローラーから入力イベントを読み取るにはどうすればよいですか??

私はPythonに非常に慣れていないので、明らかな何かが欠けている可能性があります。

ありがとう、スティーブ。

4

1 に答える 1

0

evdev のイベント数がそれほど多くない限り、数ミリ秒ごとにポーリングできます。

大まかに、ソリューションは次のようになります。これは、無限ループの代わりにメイン イベント ループを使用します。

root = tk.Tk()
...
def poll_evdev():
    for ev in device.read():
        print("Take photo")
    # schedule the polling to occur every 100 ms
    root.after(100, poll_evdev)
...
# start the polling process
poll_evdev()

# start the GUI event loop
root.mainloop()

注: ポーリングに数百ミリ秒以上かかると、GUI が遅くなります。その場合は、別のスレッドでポーリングを行う必要がある場合があります。

于 2015-04-10T19:14:05.780 に答える