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()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。