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

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

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

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

Q&A

解決済

1回答

2988閲覧

tkinterでボタンとキー両方どちらを押しても処理が行われるようにする方法を教えて下さい

mikumikuDM

総合スコア82

Python

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

0グッド

0クリップ

投稿2021/04/23 08:17

前提・実現したいこと

pythonのtkinterを使用してボタンを作成しました。
このボタンをキー入力を押しても同じように処理してくれるようにしたいです。

また、キーを押すとボタンが押される方法はあるのでしょうか?

該当のソースコード

python

1import tkinter 2 3def button_func(event): 4 5 event.widget.config(fg="red") 6 print(event.widget.cget("text") + "を赤くしました") 7 8app = tkinter.Tk() 9 10# ボタンを50個配置 11for j in range(10): 12 for i in range(5): 13 # ボタンの名前(テキスト)を設定 14 button_name = "ボタン(" + str(i) + "," + str(j)+ ")" 15 16 # ボタンのインスタンス作成 17 button = tkinter.Button( 18 app, 19 text=button_name 20 ) 21 22 # ボタンを2次元的に配置 23 button.grid(column=i, row=j) 24 25 # ボタンクリック時のイベント設定 26 button.bind("<ButtonPress>", button_func) 27 28# メインループ 29app.mainloop()

具体的な希望

キーボードの0が押されたとき
ボタン(0,0)を押したときと同じように動作させるために
どのように書き加えればいいか教えてほしいです

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

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

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

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

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

guest

回答1

0

ベストアンサー

ボタンを押したときのイベントの設定方法は複数あるのですが、
command に指定すれば button.invoke() でボタンのクリックができます。

event.widget を参照していますが、bind でイベントを登録する場合は、
キー入力の場合のイベントの発行元がボタンではなくなるので、
同じ関数を呼び出すようにイベントを設定した方が楽です。

python

1 2 3import tkinter 4from functools import partial 5 6def button_func(button, row, column, event=None): 7 # event はボタンのイベント、キー入力イベントで異なるので使わない 8 # functools.partial を使い、引数で受け取ります。 9 10 print(f"{row},{column} を赤くしました") 11 button.config(bg="red") 12 13app = tkinter.Tk() 14 15i = j = 0 16button = tkinter.Button(app, text=f"{i},{j}") 17button.grid(row=i, column=j) 18 19func = partial(button_func, button, i, j) 20button.bind("<ButtonPress>", func) 21app.bind_all("<a>", func) # a キーを押す 22 23app.mainloop()

投稿2021/04/23 10:31

teamikl

総合スコア8664

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

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

mikumikuDM

2021/04/23 12:45

実際に動かしてできることが確認できました!ありがとうございます。 助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問