質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.78%

Tkinterでwacomタブレットを使いたい。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 113

Marusoftware

score 19

開発環境はlinuxです。

tkinterでwacomタブレットを使って、筆圧認識可能なエディターを作りたいと考えています。
しかし、tkinterのマウスイベントは筆圧を返しません。
どのようにすれば解決できるか、ご教示いただけるとありがたいです。
(できれば、マルチプラットフォーム対応できるとありがたいです。
あと、なるべくpythonで)
私は、xinput(linux)やlibwacomを使用する方法を考えつきましたが、使い方が分かりません。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

明確な回答ではないので、散文になってしまいましたが、
ひとまず投稿します。


GTK が XInput を使ってるそうですが、
XInput の導入自体がwindowsではどうなのでしょう。
(gnome 利用時に使ってた事がありますが、Windows では使ったことなし)


pyglet を tkinter に埋め込むのを思いつきましたが、
埋め込み方法のマルチプラットフォーム対応が手間になるかな。

VTK や matplotlib が、各種GUI向けに埋め込みようのウィジェットを提供してるので
同じアプローチでできないかと考えますが、実際に試したことはありません。

C拡張が必要になる場面は、埋め込み位なら ctypes でなんとかならないか。
位の思い付きレベルのアイデア。


tkinter に拘らなければ、マルチプラットフォームな選択肢は

  • Qt / QTabletEvent 
  • pyglet (※一般的なGUIウィジェットは付属しない。3rd party 制のライブラリはあり)

tkinter でタブレットを使うサンプルコードは cgkit.wintab を使ってました。


動作確認は一切してませんが、一通りライブラリ対応状況を調べたまとめ
対応プラットフォームが明記されたもの以外は ? で記載。

 library   pen-tablet   platform   license 
 tkinter   x     
 qt5   QTabletEvent   multi   
 wxPython   x     
 GTK3   △ motion event   multi?   
 kivy   △   multi?   
 pygame(SDL)   x     
 pyglet   o   multi?   
 cgkit.wintab   o   windows   MOZILLA 
 JPen   o   multi   LGPL 
  • gtk は xinput で対応。xinputのwindows の対応が未確認
    (windows で検索すると、xbox の xinput が出てきて、導入事例が探せない…)
  • kivy windows で(that doesnt report pressure and tilt) 筆圧取れない報告があり?(未確認)
  • cgkit wintab 利用 windows only
  • Java Pen Tablet Access Librar JPen

JPen は processing (Java/Jython)で使われてるライブラリ、
要件には合いませんが、実装は参考になるかもしれない。
(自前で wintab, cocoa, xinput を扱いプラットフォーム毎の対応をする場合)

Device access is implemented through providers. JPen contains providers for Linux (XInput), Windows (Wintab), Mac OS X (Cocoa, OS X 10.5) and the Java system mouse (Java AWT mouse).

追記: github へ移行していたようです。
JPen github C/Java のライブラリ実装がありました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/10/22 13:09 編集

    ウィンドウを作成する関数ですね。
    イベントループを維持するためのものだと思います。

    どちらの形での利用を想定されてますか?

    - tkinter 内へ埋め込み (埋め込み方法がプラットフォーム毎に異なる)
    - tablet 関連の関数のみ利用する
     ウィンドウはtkinter のものを使いたい場合

    キャンセル

  • 2020/10/22 13:22 編集

    >やはり、tkinterでの実装は難しいでしょうか。

    デバイス関連でプラットフォーム別に方法が違うという事で、
    マルチプラットフォーム対応の部分に手間がかかりそうです。

    ----
    回答で挙げた tkinter のサンプルコードで使われている cgkit.wintab 内部は
    C++/BoostPython で書かれてます。

    pyglet は ほぼ全てpyhont (C拡張が必要なところをctypesで実装) なので、
    こちらの方が python のみで済むので利用しやすい。

    ----
    pyglet のコードを(pygletに依存せず)直接tkinterで利用するとしたら

    プラットフォーム別の共有ライブラリを扱うコード (pygletへの依存は少ない)
    https://github.com/pyglet/pyglet/tree/master/pyglet/libs

    は、そのまま使わせてもらって、
    タブレットクラスを pyglet 依存なく使えるように再構成 (各プラットフォーム毎に必要)
    https://github.com/pyglet/pyglet/tree/master/pyglet/input

    タブレットからの情報さえ得られれば tkinter への統合は
    event_generate を使って独自のイベントを生成することができます。
    (※ 但し tkinter に patch が必用)

    追記: イベントに独自データを持たせる方法は、
    tcl/tk では -data オプションが有りますが、tkinter では無視されている状態です (Python-3.9現在)。
    パッチはレビューで止ってます。(2008-2018)
    https://bugs.python.org/issue3405

    追記2: イベントに持たせられる独自データは仕様上、
    文字列になってしまうようなので、普通に callback にした方が良いかもしれない。

    キャンセル

  • 2020/10/24 14:08

    ありがとうございます。
    やってみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る