Combinando Tkinter mainloop con otro detector de eventos

Estoy tratando de construir un progtwig que escuche ciertas combinaciones de teclas y luego muestre información al usuario en una ventana de Tkinter. Para hacer esto, estoy usando un keylogger así (simplificado para este ejemplo):

from pyHook import HookManager from pythoncom import PumpMessages import Tkinter as tk def on_keyboard_event(event): label.config(text=event.Key) root.update() return True hm = HookManager() hm.KeyDown = on_keyboard_event hm.HookKeyboard() root = tk.Tk() label = tk.Label(root, text='Hello world') label.pack() PumpMessages() 

Como se esperaba, la ventana aparece y le muestra al usuario qué tecla presionó. Sin embargo, me gustaría integrar la funcionalidad para mostrar otros mensajes interactuando con la ventana de Tkinter, como al presionar un botón. Sin embargo, parece que necesito el mainloop de Tkinter para hacer esto, que no puedo averiguar cómo ejecutar junto con PumpMessages (), ya que también detiene el código similar a mainloop ().

Intenté ejecutar root.mainloop () en un root.after (), e intenté recrear root.mainloop así:

 def mainloop(): root.update() root.after(50, mainloop) 

y luego ejecutarlo justo antes de PumpMessages, pero ninguna de estas soluciones funcionó. Tampoco parece que puedas ejecutar PumpMessages o root.mainloop en un hilo, aunque podría no hacerlo bien. Si esto no es posible con Tkinter, ¿existe alguna interfaz gráfica de usuario de Python que pueda usar que lo haría posible?

No necesita crear una función para usar mainloop() simplemente coloque mainloop() en la parte inferior de su código. Si desea un retraso, use root.after(milliseconds, function)

Además, recuerde poner mainloop() antes de PumpMessages()

p.ej

 def mainloopfunction(): mainloop() root.after(5000, mainloopfunction) 

Espero poder ayudar!