Python中Shift和Caps Lock的状态

3

我正在使用Python 2.5编写一个TkInter应用程序,需要查找大写锁定和Shift键的状态(true或false)。我已经在互联网上搜索了很多,但是找不到解决方案。

4个回答

3

Tkinter中的键盘事件可能会比较棘手。

我建议您按照以下顺序查看:

这是一个显示键码和状态事件参数值的程序。您可以使用它进行实验。单击窗口,然后按键盘。

from Tkinter import *
root = Tk()

def key(event):
    print "Keycode:", event.keycode, "State:", event.state

def callback(event):
    frame.focus_set()
    print "clicked at", event.x, event.y

frame = Frame(root, width=100, height=100)
frame.bind("<Key>", key)
frame.bind("<Button-1>", callback)
frame.pack()

root.mainloop()


0

0

使用:

from Tkinter import *
root = Tk()
caps_lock_on = False
def CAPSLOCK_STATE():
    import ctypes
    hllDll = ctypes.WinDLL ("User32.dll")
    VK_CAPITAL = 0x14
    return hllDll.GetKeyState(VK_CAPITAL)

CAPSLOCK = CAPSLOCK_STATE()
if ((CAPSLOCK) & 0xffff) != 0:
    print "\nCaps lock is on\n"
    caps_key_on = True
else:
    caps_key_on = False
    print 'Caps lock is off'

def caps_lock_pressed(event=''):
    global caps_lock_on
    if caps_lock_on == False:
        caps_lock_on = True
        print 'Caps lock is on'
    else:
        caps_lock_on = False
        print 'Caps lock is off'

#Changes if shift key is on and off 
def shift_key_pressed(event=''):
    global shift_key_on
    shift_key_on = True
    print 'Shift is being holded' 

def shift_key_released(event=''):
    global shift_key_on
    shift_key_on = False
    print 'Shift has been released'
        
root.bind('<Caps_Lock>',caps_lock_pressed)
root.bind('<Shift_L>',shift_key_pressed)
root.bind('<Shift_R>',shift_key_pressed)
root.bind('<KeyRelease-Shift_R>',shift_key_released)
root.bind('<KeyRelease-Shift_L>',shift_key_released)
root.mainloop()

这将检查是否开启了大写锁定,并将绑定大写锁定和Shift键以更改状态。大写锁定检测系统是借用的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接