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

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

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

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

Tkinter

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

Q&A

解決済

1回答

2322閲覧

Python3 Tkinter バインドの意図しない動作

person

総合スコア223

Python 3.x

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

Tkinter

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

0グッド

0クリップ

投稿2020/11/19 00:39

編集2020/11/19 02:32

Raspberry Piで、<ButtonPress><ButtonRelease>でマウスホイールスクロール時にも反応してしまうのですが、そういう仕様なのでしょうか?

Python

1import tkinter as tk 2 3def func(e, str): 4 print(str) 5 6win = tk.Tk() 7win.geometry("400x300") 8 9entry = tk.Entry(win) 10entry.grid() 11entry.focus_set() 12 13entry.bind("<Button>", lambda e:func(e, "<Button>")) # 各クリックで押したとき(スクロール?) 14#entry.bind("<ButtonPress>", lambda e:func(e, "<ButtonPress>")) # <Button> と同じ 15#entry.bind("<Button-1>", lambda e:func(e, "<Button-1>")) # 左クリックで押したとき 16#entry.bind("<Button-2>", lambda e:func(e, "<Button-2>")) # 中クリックで押したとき 17#entry.bind("<Button-3>", lambda e:func(e, "<Button-3>")) # 右クリックで押したとき 18#entry.bind("<ButtonRelease>", lambda e:func(e, "<ButtonRelease>")) # 各クリックで離したとき(スクロール?) 19#entry.bind("<Double-1>", lambda e:func(e, "<Double-1>")) # 左ダブルクリックで押したとき 20#entry.bind("<Triple-1>", lambda e:func(e, "<Triple-1>")) # 左トリプルクリックで押したとき 21#entry.bind("<Motion>", lambda e:func(e, "<Motion>")) # マウスポインタ動いたとき 22#entry.bind("<Enter>", lambda e:func(e, "<Enter>")) # マウスポインタウィジェットに入る 23#entry.bind("<Leave>", lambda e:func(e, "<Leave>")) # マウスポインタウィジェットから出る 24#entry.bind("<MouseWheel>", lambda e:func(e, "<MouseWheel>")) # マウスホイールをしたとき 25#entry.bind("<Key>", lambda e:func(e, "<Key>")) # キーを押したとき 26#entry.bind("<KeyRelease>", lambda e:func(e, "<KeyRelease>")) # キーを離したとき(押しっぱなしでも反応?) 27#entry.bind("<Escape>", lambda e:func(e, "<Escape>")) # 'Esc'キーを押したとき 28#entry.bind("<Tab>", lambda e:func("<Tab>")) # 'Tab'キーを押したとき 29#entry.bind("<Return>", lambda e:func(e, "<Return>")) # 'Enter'キーを押したとき 30#entry.bind("<BackSpace>", lambda e:func(e, "<BackSpace>")) # 'Backspace'キーを押したとき 31#entry.bind("<Delete>", lambda e:func(e, "<Delete>")) # 'Delete'キーを押したとき 32#entry.bind("<F1>", lambda e:func(e, "<F1>")) # 'F1'キーを押したとき(Fnキーを押しながらではダメ) 33#entry.bind("<Home>", lambda e:func(e, "<Home>")) # 'Home'キーを押したとき 34#entry.bind("<Up>", lambda e:func(e, "<Up>")) # '↑'キーを押したとき 35#entry.bind("<Prior>", lambda e:func(e, "<Prior>")) # 'PageUp'キーを押したとき 36#entry.bind("<Next>", lambda e:func(e, "<Next>")) # 'PageDown'キーを押したとき 37#entry.bind("<Control_L>", lambda e:func(e, "<Control_L>")) # '左Ctrl'キーを押したとき 38#entry.bind("<Alt_L>", lambda e:func(e, "<Alt_L>")) # '左Alt'キーと'a'キーを同時に押したとき 39#entry.bind("<Alt-Key-a>", lambda e:func(e, "<Alt-Key-a>")) # 'Alt'キーと'a'キーを同時に押したとき 40#entry.bind("<Shift-Key-a>", lambda e:func(e, "<Shift-Key-a>")) # 'Shift'キーと'a'キーを同時に押したとき(エントリに入力される文字は'a'。大文字小文字反転) 41#entry.bind("<Shift-Key-A>", lambda e:func(e, "<Shift-Key-A>")) # 'Shift'キーと'A'キーを同時に押したとき(エントリに入力される文字は'A') 42#entry.bind("a", lambda e:func(e, "a")) # 'a'キーを押したとき 43#entry.bind("<KeyPress-b>", lambda e:func(e, "<KeyPress-b>")) # 'b'キーを押したとき 44#entry.bind("<KeyRelease-c>", lambda e:func(e, "<KeyRelease-c>")) # 'c'キーを離したとき 45#entry.bind("xyz", lambda e:func(e, "xyz")) # 'x','y','z'を順番に押したとき 46 47 48win.mainloop()

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

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

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

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

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

guest

回答1

0

ベストアンサー

確認: 他の環境では問題なく Raspberry Pi でのみ発症する現象ですか?

<ButtonPress><ButtonRelease>でマウスホイールスクロール時にも反応してしまうのですが、そういう仕様なのでしょうか?

マウスホイール操作時に(ホィールの)ボタン自体を抑え込んでるという事はないですか?
ホイール操作自体は <Button> には反応しないはずです。

<Button> は、全てのボタンのクリックに反応するので、その点は仕様です。
区別が必要な場合は、<Button-1> と同様に、サフィックスを付けます
例: <ButtonPress-1>

  • 1 左クリック
  • 2 中央 (ホィール)
  • 3 右クリック
  • 4 (unix) ホィール 上
  • 5 (unix) ホィール 下

追記: Pre tk 8.4 Focus

https://wiki.tcl-lang.org/page/mousewheel

tcl

1MGS Here's a quick little hack to get MouseWheel events on X (Linux): 2 3 bind all <Button-4> \ 4 {event generate [focus -displayof %W] <MouseWheel> -delta 120} 5 6 bind all <Button-5> \ 7 {event generate [focus -displayof %W] <MouseWheel> -delta -120}

投稿2020/11/19 01:07

編集2020/11/19 05:16
teamikl

総合スコア8664

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

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

person

2020/11/19 02:28 編集

Windowsでは起きなかったです。 ホイールを軽く上下にスクロールしただけで<MouseWheel>のように反応します。
teamikl

2020/11/19 06:45 編集

環境(プラットフォーム)の違いの他に、 バージョンの違いも考えられますね。 調べてみると、環境やデバイスの設定によっては、 ホィール操作が Button-4 Button-5 となっていて、 MouseWheel イベントに再割り当てされる環境もあるようです。 <Button> は <Button-n> 任意の n のイベントを得られるので、 ホィール操作で反応する。(予想 確認方法 <Button-4> <Button-5> 等を bind してみて ホィールの上下イベントを確認。(unix 対策としては、サフィックスを付ける事で ホィール操作時のイベントを除外できませんか?
person

2020/11/20 01:49 編集

<Button-4>には上スクロール、 <Button-5>には下スクロールが反応しました。 左・中・右のクリックは反応しませんでした。
person

2020/11/20 02:05

サフィックス付加で意図した動作になりました。 <Button-1> <ButtonRelease-1> 等
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問