Я построил счетчик, который я тестировал, чтобы работать вместе с другой игрой, в которую я играю. Теперь я хочу использовать Tkinter GUI для отображения этого счетчика по мере его увеличения.Python - Tkinter Freezing w/PyHook
Я плохо понимаю, что есть проблема с запуском mainloop от Tkinter одновременно с запуском части PumpMessages, необходимой для моего PyHook. Я пробовал фрагменты кода для внесения исправлений, но я не могу найти ничего, что я могу подключить.
Как обновить код, чтобы графический интерфейс Tkinter не просто замерзал?
import pyHook, pythoncom, sys, win32api, win32con, time, ctypes
from Tkinter import *
from threading import Thread
Fc, JKc = 0, 0
x, j, i = '', '', ''
def killProgram():
ctypes.windll.user32.PostQuitMessage(0)
root.destroy()
rootThread.join()
#this is my counter input
def onKeyboardEvent(event):
global i, x, Fc, JKc, j
i = event.Key
if i=='F4':
killProgram
elif i=='Return':
if 'f ' == x[:2] and len(x) >= 3:
Fc = Fc + 1
elif 'jk ' == x[:3] and len(x) >= 4:
JKc = JKc + 1
j = x
x = ''
elif i=='Up':
x = j
else:
x = x + chr(event.Ascii)
return True
hooks_manager = pyHook.HookManager()
hooks_manager.KeyDown = onKeyboardEvent
hooks_manager.HookKeyboard()
#My GUI
root = Tk()
wlabel = Label(root, text='Weapon')
wlabel.grid(column=0, row=0, sticky='NE')
hlabel = Label(root, text='Hand')
hlabel.grid(column=1, row=0, sticky='N')
alabel = Label(root, text='All')
alabel.grid(column=2, row=0, sticky='NW')
wc = StringVar()
wcounter = Label(root, textvariable = wc)
wcounter.grid(column=0, row=1, sticky='SE')
hc = StringVar()
hcounter = Label(root, textvariable = hc)
hcounter.grid(column=1, row=1, sticky='S')
ac = StringVar()
acounter = Label(root, textvariable=ac)
acounter.grid(column=2, row=1, sticky='SW')
def startTimerThread():
while True:
win32api.PostThreadMessage(mainThreadId, win32con.WM_QUIT, 0, 0)
time.sleep(1)
mainThreadId = win32api.GetCurrentThreadId()
timerThread = Thread(target=startTimerThread)
timerThread.start()
#Updates Label
while runningProgram:
hc.set(text=str(Jkc))
#wc.set(text=str(Fc))
#ac.set(text=str(Fc+JKc))
root.after(100,root.quit)
root.mainloop()
pythoncom.PumpMessages()