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 오후

목록으로