tkinter, pyput, trace 질문
import tkinter as tk
from pynput import keyboard
def on_press(key):
try:
print(key.char, end='')
x = len(root.myentry.get())
root.myentry.insert(x, key.char)
except AttributeError:
root.myentry.delete(0, tk.END)
print(' special key pressed: {0}'.format(key))
def on_release(key):
if key == keyboard.Key.esc: # esc 키 종료
root.myentry.delete(0, tk.END)
listener = keyboard.Listener(on_press=on_press, on_release=on_release)
listener.start() # 리스너 시작
def callbackW(*args):
xl.set(root.xE.get())
def callbackR(*args):
print(" data is read ")
def hit():
print(" read the data :",root.xE.get())
root = tk.Tk()
root.title("tkinter the trace of () change tracking ")
root.xE = tk.StringVar()
root.myentry = tk.Entry(root,textvariable=root.xE)
root.myentry.pack(pady=5,padx=10)
root.xE.trace("w",callbackW)
root.xE.trace("r",callbackR)
xl = tk.StringVar()
lab = tk.Label(root,textvariable=xl)
xl.set(" the input display ")
lab.pack(pady=5,padx=10)
btn = tk.Button(root,text=" read ",command=hit)
btn.pack(pady=5)
root.mainloop()
listener.join()
예를 들어, 윈도우 메모장에서 hooking으로 입력 후 파이썬 창에 글자가 나타나는 코드를 만들고 있습니다.
영어 abc...는 잘 되는데, 키보드의 ins키, 한영키 등을 누르면 아래와 같은 에러가 뜹니다.
NoneUnhandled exception in listener callback
Traceback (most recent call last):
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\site-packages\pynput_util__init__.py", line 211, in inner
return f(self, args, kwargs)
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\site-packages\pynput\keyboard_win32.py", line 284, in _process
self.on_press(key)
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\site-packages\pynput_util__init__.py", line 127, in inner
if f(args) is False:
File "e:\test06.py", line 95, in on_press
root.myentry.insert(x, key.char)
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\tkinter__init__.py", line 2692, in insert
self.tk.call(self._w, 'insert', index, string)
_tkinter.TclError: wrong # args: should be ".!entry insert index text"
그리고 한영키를 미리 누르고 run 후 '안녕하세요'를 입력하면 'dkssudgktpdy' 이렇게 한글이 나오지 않습니다.
어떻게 하면 에러가 뜨지 않고 한글도 처리되도록 만들 수 있을까요?
mono 님 433
2021년 10월 5일 2:21 오후