首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tkinter用pyHook提取奇数

Tkinter用pyHook提取奇数
EN

Stack Overflow用户
提问于 2016-06-19 15:52:09
回答 1查看 661关注 0票数 1

我有一个Tkinter应用程序,我需要隐藏在按钮上。我不能假设应用程序会有焦点,所以我实现了键盘记录器风格的pyHook。但是,每当我从pyHook启动的函数中调用However ()时,窗口就会挂起,我不得不强制关闭它。

为了进行测试,我在GUI本身中添加了一个按钮来调用完全相同的函数,它工作得很好。到底怎么回事?两次都是“隐藏”指纹,所以我知道它确实是挂在撤回()调用本身上的。

下面是一个最小的、完整的、可验证的示例,以说明我的意思:

代码语言:javascript
复制
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.button = Button(root, text="Withdraw", command=self.Hide) # works fine
        self.button.grid()

    def ButtonPress(self, scancode, ascii):
        if scancode == 82:   # kp_0
            self.Hide() # hangs

    def Hide(self):
        print 'hiding'
        self.root.withdraw()
        time.sleep(2)
        self.root.deiconify()

root = Tk()
TestingGUI = TestingGUI(root)

def keypressed(event):
    key = chr(event.Ascii)
    # have to start thread in order to return True as required by pyHook
    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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-21 13:17:54

this answer here解决

本质上,不能从另一个线程调用Tkinter类中负责处理按键的函数ButtonPress

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37909046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档