.bind()不适用于shift-key绑定?

时间:2016-12-03 16:29:13

标签: python python-3.x tkinter

你可以说这是我的计算器程序。我希望用户不仅可以通过鼠标单击按钮来使用它,还可以使用键盘。所以我使用.bind()并且所有这些都工作正常,除了使用shift键的5个绑定,只有前两个(shift- =和shift-8)工作,我没有看到为什么其他的原因三个(shift-6,shift-5和shift-1)不起作用。每次我单击Shift-1或SHift-5或Shift-6时,它实际上什么都不做。

btw这里是包含绑定的代码部分,如果你无法在上面找到它:

# ---------------Key Bindings---------------

        root.bind('<Delete>', self.button_clear_press)

        root.bind('<Escape>', self.button_off_press)

        root.bind('`', self.chargeInvert)

        root.bind('=', self.equals)

        root.bind('.', self.decimal)

        root.bind('9', lambda x: self.numButton_press('9'))

        root.bind('8', lambda x: self.numButton_press('8'))

        root.bind('7', lambda x: self.numButton_press('7'))

        root.bind('6', lambda x: self.numButton_press('6'))

        root.bind('5', lambda x: self.numButton_press('5'))

        root.bind('4', lambda x: self.numButton_press('4'))

        root.bind('3', lambda x: self.numButton_press('3'))

        root.bind('2', lambda x: self.numButton_press('2'))

        root.bind('1', lambda x: self.numButton_press('1'))

        root.bind('0', lambda x: self.numButton_press('0'))

        root.bind('+', lambda x: self.mathButton_press('+'))

        root.bind('<Shift-=>', lambda x: self.mathButton_press('+'))

        root.bind('-', lambda x: self.mathButton_press('-'))

        root.bind('*', lambda x: self.mathButton_press('×'))

        root.bind('<Shift-8>', lambda x: self.mathButton_press('×'))

        root.bind('/', lambda x: self.mathButton_press('÷'))

        root.bind('<Shift-6>', lambda x: self.mathButton_press('^'))

        root.bind('<Shift-5>', lambda x: self.mathButton_press('%'))

        root.bind('<Shift-1>', lambda x: self.mathButton_press('!'))

1 个答案:

答案 0 :(得分:1)

<1>表示mouse left button,因此<Shift-1>表示Shift + mouse left button

某些键具有特殊名称 - keysym - 您必须在代码中使用它们。

  • Shift + 1<exclam>
  • Shift + Keypad 1<KP_End>(但这取决于Num Lock

您可以使用此代码查看按键时的keysym

import tkinter as tk

def test(event):
    print('keysym:', event.keysym)

root = tk.Tk()

root.bind('<Key>', test)

root.mainloop()

您可以在Tcl/Tk - keysymTkinter 8.5 reference: a GUI for Python: 54.5. Key names

等网页上找到一些名称