У меня есть приложение GUI Tkinter, в которое мне нужно ввести текст. Я не могу предположить, что приложение будет иметь фокус, поэтому я реализовал pyHook, keylogger-style.Tkinter текстовая запись с pyHook висит окно GUI
Когда окно GUI не имеет фокуса, текстовая запись работает нормально, а обновления StringVar корректно отображаются. Когда в окне GUI есть, у меня есть фокус, и я пытаюсь ввести текст, все дело падает.
Т.е., если я нажимаю на окно консоли или что-то еще после запуска программы, работает текстовая запись. Если я сразу же попробую ввести текст (графический интерфейс начнется с фокуса), или я переориентирую окно в любой момент и введите текст, он сработает.
Что происходит?
Ниже приведен минимальный полный проверяемым пример, чтобы продемонстрировать, что я имею в виду:
from Tkinter import *
import threading
import time
try:
import pythoncom, pyHook
except ImportError:
print 'The pythoncom or pyHook modules are not installed.'
# main gui box
class TestingGUI:
def __init__(self, root):
self.root = root
self.root.title('TestingGUI')
self.search = StringVar()
self.searchbox = Label(root, textvariable=self.search)
self.searchbox.grid()
def ButtonPress(self, scancode, ascii):
self.search.set(ascii)
root = Tk()
TestingGUI = TestingGUI(root)
def keypressed(event):
key = chr(event.Ascii)
threading.Thread(target=TestingGUI.ButtonPress, args=(event.ScanCode,key)).start()
return True
def startlogger():
obj = pyHook.HookManager()
obj.KeyDown = keypressed
obj.HookKeyboard()
pythoncom.PumpMessages()
# need this to run at the same time
logger = threading.Thread(target=startlogger)
# quits on main program exit
logger.daemon = True
logger.start()
# main gui loop
root.mainloop()
1. Если вы хотите отвечать на запросы пользователей, используйте комментарии; мне повезло, что я вернулся и посмотрел. 2. Если вы хотите избежать этого, потратьте больше времени на написание описательного названия, а не на «странность» *, которая никому не помогает. Тем не менее, я приношу свои извинения за то, что они запутали их. – jonrsharpe
1. Я не знал, что это уведомило вас, увидев, что вы не комментировали или не взаимодействовали с моим сообщением. 2. Чтение только второго абзаца показало бы, что это разные вопросы, или вы основывали свой дубликат исключительно на основе названия? Я использую неопределенный термин, как странность, потому что я не знаю, что происходит. – heidi
Темы и tkinter не очень хорошо смешиваются, см. Например http://stackoverflow.com/a/10556698/5781248 –