【问题标题】:tkinter shortcuts impossible to enabletkinter 快捷方式无法启用
【发布时间】:2012-12-14 10:26:37
【问题描述】:

我正在编写的程序中的快捷方式用完了,而且我发现其中很大一部分无法启用。 我开始认为它可能与操作系统或桌面相关,所以我告诉你我在 KDE 下运行 Fedora Linux。

这是我用来探索钥匙问题的小程序:

#!/usr/bin/env python   
from Tkinter import *    
root = Tk()
text=Text(root)    
text.pack(side=LEFT, fill=BOTH, expand = YES)

def key(event):
    print "pressed", repr(event.char)

def testfun(a):
    print"test worked, pressed %s: control key %s" % (repr(event.char),str(a))  

text.bind("<Key>", key)
for i in range(10):
    text.bind('<Control-'+str(i)+'>',  lambda event,arg=i:testfun(arg,event))

mainloop()

(我对 ctrl-number 快捷键没有问题,但让我们从这里开始)。

我的问题:Ctrl-6...Ctrl-0被拦截了,但是我找不到办法让Ctrl-1..Ctrl-5!

1..6 的示例输出为:

1:按下'1'

2: 按下''

3: 按下'\x1b'

4: 按下'\x1c'

5: 按下'\x1d'

6:测试成功,按下'\x1e':控制键6

我还尝试将快捷方式绑定到 root,并执行 return 'break',但没有任何效果。

你有什么想法吗?

谢谢!

【问题讨论】:

    标签: python tkinter keyboard-shortcuts


    【解决方案1】:

    以下是对您的代码的一些修复,使其能够正常工作:

    首先key函数应该使用keysym成员而不是eventchar

    def key(event):
        print "pressed", repr(event.keysym)
    

    那么你的绑定函数应该只使用key 函数,不需要那个lambda。另外你应该绑定&lt;Control-Key-1&gt;,而不是&lt;Control-1&gt;,(后者指的是muse按钮),所以:

    for i in range(10):
        text.bind('<Control-Key-'+str(i)+'>',  key)
    

    你可以擦掉这条线:

    #text.bind("<Key>", key)
    

    你也可以像这样绑定小写字母:

    for i in range(ord('a'), ord('z') + 1):
        text.bind('<Control-Key-'+chr(i)+'>',  key)
    

    希望这会有所帮助。

    【讨论】:

    • 我感到非常尴尬......但我对我编写为 的所有字母绑定都能完美运行这一事实感到困惑!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多