1
我已經構建了一個計數器,我已經測試過與另一個我玩的遊戲一起工作。現在我想利用Tkinter GUI來顯示這個計數器,因爲它增加了。Python - Tkinter Freezing w/PyHook
我鬆散地理解,在運行我的PyHook所需的PumpMessages部分的同時,運行Tkinter的mainloop時出現問題。我試過使用Google代碼片段進行更正,但找不到任何可以插入的東西。
如何更新我的代碼,以便Tkinter GUI不會凍結?
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()