当我尝试在Tkinter文本小部件上使用KeyRelease事件时,它有时在event.char中提供小写字符,但在文本小部件中显示大写字符。当我轻轻并快速按一下Shift键然后再按一个字母时,就会发生这种情况。如何通过Tkinter Text小部件上的KeyRelease事件可靠地捕获大小写正确的字符?

这是我在MacBook Pro上测试的示例代码:

from Tkinter import *

class App:

    def __init__(self):

        # create application window
        self.root = Tk()

        # add frame to contain widgets
        frame = Frame(self.root, width=768, height=576,
                      padx=20, pady=20, bg="lightgrey")
        frame.pack()

        # add text widget to contain text typed by the user
        self.text = Text(frame, name="typedText", bd="5", wrap=WORD, relief=FLAT)
        self.text.bind("<KeyRelease>", self.printKey)
        self.text.pack(fill=X)

    """
    printKey sometimes prints lowercase letters to the console,
    but upper case letters in the text widget,
    especially when I lightly and quickly press Shift and then some letter
    on my MacBook Pro keyboard
    """
    def printKey(self, event):
        print event.char

    def start(self):
        self.root.mainloop()

def main():
    a = App()
    a.start()

if __name__ == "__main__":
    sys.exit(main())

最佳答案

发生的情况是您在字母键之前释放了Shift键。在插入字符时按下了班次,这就是小部件获取大写字符的原因,但是在处理键释放绑定时,班次已被释放,因此您可以看到小写字符。

如果要打印插入的内容,请绑定到按键而不是释放键。

关于python - 如何使Tkinter KeyRelease事件始终提供大写字母?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9050282/

10-13 08:20