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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3228閲覧

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

Marusoftware

総合スコア189

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

2クリップ

投稿2020/10/18 07:00

編集2020/10/21 15:11

開発環境はlinuxです。

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

teamikl👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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


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


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

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

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


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

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

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


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

librarypen-tabletplatformlicense
tkinterx
qt5QTabletEventmulti
wxPythonx
GTK3△ motion eventmulti?
kivymulti?
pygame(SDL)x
pygletomulti?
cgkit.wintabowindowsMOZILLA
JPenomultiLGPL
  • 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/19 04:39

編集2020/10/19 04:46
teamikl

総合スコア8760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Marusoftware

2020/10/21 15:18 編集

回答ありがとうございます。 返信遅れまして、大変申し訳ございません。 とても丁寧に回答頂き、大変有難いです。 実は、私の言うxinputとは、linuxのxinputのことで、windows上のものではないのです。 説明不足で本当にすみません。 やはり、tkinterでの実装は難しいでしょうか。 pygletというのは、とても魅力的なのですが、ペンタブ用の関数ってどれでしょうか。 inputとかでしょうか。 マルチプラットフォーム化はある程度できるので、一番いい手な気がします。 情報をいただきありがとうございます。 (もう少し詳しく、情報がいただけると大変有難いです。) 度重なるご迷惑をおかけすることとなりますが、ご意見を頂戴できると幸いです。 なお、質問を一部訂正させていただきました。 併せてよろしくお願いします。
teamikl

2020/10/21 15:52

>私の言うxinputとは、linuxのxinputのことで、windows上のものではないのです。 ここは文脈から把握できたので大丈夫です。 マルチプラットフォームとのことなので、 windows 上でも xinput/x11 経由で操作するのかなと思ってました。 >ペンタブ用の関数ってどれでしょうか。inputとかでしょうか。 pyglet.input.get_tablets() で得られるようです。 レポジトリ、主要プラットフォームはサポートしてそうな感じ https://github.com/pyglet/pyglet/tree/master/pyglet/input サンプルコード https://github.com/pyglet/pyglet/blob/master/examples/tablet.py Document の tablet 関連への検索結果 https://pyglet.readthedocs.io/en/latest/search.html?q=tablet&check_keywords=yes&area=default
Marusoftware

2020/10/21 23:10 編集

pyglet 使えそうですね… ありがとうございます。 早速、試してみます。 ただ、少し気になるのは、 window = pyglet.window.Window() のところですね。 これってなんの関数なのでしょう?
teamikl

2020/10/22 04:35 編集

ウィンドウを作成する関数ですね。 イベントループを維持するためのものだと思います。 どちらの形での利用を想定されてますか? - tkinter 内へ埋め込み (埋め込み方法がプラットフォーム毎に異なる) - tablet 関連の関数のみ利用する  ウィンドウはtkinter のものを使いたい場合
teamikl

2020/10/22 04:24 編集

>やはり、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 にした方が良いかもしれない。
Marusoftware

2020/10/24 05:08

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問