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

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

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

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

Tkinter

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

解決済

python・tkinterのキーボード操作でボタンを変化させたい

mika341kkaj
mika341kkaj

総合スコア1

Python 3.x

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

Tkinter

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

1回答

0評価

0クリップ

195閲覧

投稿2022/06/06 12:52

tkinterでキーボード操作のボタン画面を作りたい

pythonのtkinterを使って、キーボード操作で画面を切り替えられるようにしたいです。
Wキー2回で設定画面を開き、
Wキー1回でボタンの色をそれぞれ変化させます。
・PSPのようにPCのキーボードのみで操作できるアプリを作ろうとしています。

課題:変化させたいボタン(set_btn1, set_btn2, set_btn3, set_btn4)がkey_event1という関数下にあるため、変化なし。

試した方法:move_selectを実行した後、key_event1を実行して画面を表示させれば良いのでは?
→Wキーを押すたびに画面が読み込まれて非常にもっさりした操作になったのでボツで。

(画面が変わった後にもボタンを追加する予定なので、init 関数に書く以外の方法でお願いします。)

やはり厳しいでしょうか?アドバイスをお願いいたします。

coding: utf-8

import sys
import os
import datetime
import wave
import pyaudio
import platform
import configparser
import errno

import tflite_runtime.interpreter as tflite
import numpy as np
#from cv2 import resize, imread
import cv2
import tkinter as tk
import tkinter.ttk as ttk
import config
from imageEdit import ImageEditing

#from measure_cam import MeasureCam

class App(tk.Frame):
def init(self, master = None):
super().init(master)
#sound
os.system("amixer cset numid=3 45%")
self.volume = 0
self.num1 = 0
self.btnfont = ("Menlo", 32)
self.btnfont_title = ("Menlo", 38)
self.current_screen = 0

############### # Layout # -----GUIの設定----- # appのフレーム(一番外側) self.pack(fill = 'both', expand=1) self.tkraise() # self.topframe = tk.Frame(self) self.topframe.grid(row=0, column=0, sticky="nsew") self.topframe.tkraise() #Wキーを連続2回押した時のイベント処理 self.bind_all('<Double-KeyPress-w>',self.key_event1) #Wキーを1回押した時のイベント処理 self.bind_all('<KeyPress-w>',self.move_select) self.outframe_count = 0 def key_event1(self,event): print(event) self.current_screen = 0 self.num1 = 0 self.setting = tk.Frame(self) self.setting.grid(row=0, column=0, sticky="nsew") self.set_lab1 = tk.Label(self.setting, text="設定" ,font=self.btnfont_title ,width=12,height=2) self.set_lab1.pack() self.set_btn1 = tk.Button(self.setting,text = '音量' ,command=lambda:[self.act_btn1(1)] ,bd=0 ,bg="white" ) self.set_btn1.pack() self.set_btn2 = tk.Button(self.setting,text = 'テーマカラー' ,command=lambda:[self.act_btn2(2)] ,bd=0 ,bg="white" ) self.set_btn2.pack() self.set_btn3 = tk.Button(self.setting,text = '文字の大きさ' ,command=lambda:[self.act_btn3(3)] ,bd=0 ,bg="white") self.set_btn3.pack() self.set_btn4 = tk.Button(self.setting,text = '設定を閉じる' ,command=lambda:[self.setting.grid_forget] ,bd=0 ,bg="white") self.set_btn4.pack() #settingのボタンアクション_音声On/Off def act_btn1(self,event): print(event) self.current_screen = 1 self.num1 = 0 self.ini_check() #設定画面を閉じる self.setting.grid_forget() self.set_btn1 = tk.Frame(self) self.set_btn1.grid(row=0, column=0, sticky="nsew") self.set_btn1_label = tk.Label(self.set_btn1 ,text="音量" ) self.set_btn1_label.pack() def move_select(self,event): print(event) if self.current_screen == 0: if self.num1==0: self.set_btn1['bd'] = 2 self.set_btn2['bd'] = 0 self.set_btn3['bd'] = 0 self.set_btn4['bd'] = 0 self.set_btn1['bg'] = "#4DB6EE" self.set_btn2['bg'] = "white" self.set_btn3['bg'] = "white" self.set_btn4['bg'] = "white" self.num1 += 1 elif self.num1==1: self.set_btn1['bd'] =0 self.set_btn2['bd'] = 2 self.set_btn3['bd'] =0 self.set_btn4['bd'] =0 self.set_btn1['bg'] ="white" self.set_btn2['bg'] = "#4DB6EE" self.set_btn3['bg'] ="white" self.set_btn4['bg'] ="white" self.num1 += 1 elif self.num1==2: self.set_btn1['bd']=0 self.set_btn2['bd']=0 self.set_btn3['bd'] = 2 self.set_btn4['bd']=0 self.set_btn1['bg']="white" self.set_btn2['bg']="white" self.set_btn3['bg'] = "#4DB6EE" self.set_btn4['bg']="white" self.num1 += 1 elif self.num1==3: self.set_btn1['bd']=0 self.set_btn2['bd']=0 self.set_btn3['bd']=0 self.set_btn4['bd'] = 2 self.set_btn1['bg']="white" self.set_btn2['bg']="white" self.set_btn3['bg']="white" self.set_btn4['bg'] = "#4DB6EE" print(self.num1) self.num1 = 0

if name == "main" :
root = tk.Tk()
root.title("test window")
root.geometry("400x400")
app = App( master = root )

app.mainloop()

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Python 3.x

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

Tkinter

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