如何使两台印刷机在Tkinter中产生相同的输出

时间:2019-10-14 23:07:00

标签: python tkinter binding

我想制作一个将两个输入绑定到一个输出的Tkinter程序,我尝试过这样:

def hh(event):
      print('hello')
root.bind(<Returna>, hh)

def hh(event):
    print('hello')
root.bind('<Return, KeyPress-a>')

但是它没有按预期工作。 有人可以告诉我如何让<Shift><KeyPress-a>一起触发hh()吗? 谢谢!

第一个错误

Traceback (most recent call last):
  File "tktest.py", line 19, in <module>
    root.bind('<Returna>', hh)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/`__init__.`py", line 1251, in bind
    return self._bind(('bind', self._w), sequence, func, add)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/`__init__`.py", line 1206, in _bind
    self.tk.call(what + (sequence, cmd))
_tkinter.TclError: bad event type or keysym "Returna" 

第二个错误

Traceback (most recent call last):  
  File "tktest.py", line 19, in <module>  
    root.bind('<Return, KeyPress-a>', hh)  
  File  "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 1251, in bind  
    return self._bind(('bind', self._w), sequence, func, add)  
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 1206, in _bind  
    self.tk.call(what + (sequence, cmd))  
_tkinter.TclError: bad event type or keysym "Return,"  

1 个答案:

答案 0 :(得分:1)

您必须使用字符串'<Return>a'并添加函数名称

root.bind('<Return>a', hh)

,但是当您在hh()之后直接按a时,它将运行Enter


import tkinter as tk

def hh(event):
      print('hello')

root = tk.Tk()
root.bind('<Return>a', hh)
root.mainloop()

如果要在按hh()Enter时运行a,则需要两个绑定

root.bind('<Return>', hh)
root.bind('a', hh)

import tkinter as tk

def hh(event):
      print('hello')

root = tk.Tk()
root.bind('<Return>', hh)
root.bind('a', hh)
root.mainloop()

编辑:

在编辑过的问题中,我看到了<Shift>,所以也许必须是Shift + a?它需要A

root.bind('A', hh) # Shift + a

在第二个错误中,我看到Return,,但也许必须是Shift + ,,它的特殊名称为<less>

root.bind('<less>', hh) # Shift + , 

.bind() not working for shift-key binds?为例,我展示了显示keysym作为按下键的代码,您可以在bind()中使用该代码

import tkinter as tk

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

root = tk.Tk()
root.bind('<Key>', test)
root.mainloop()

您可以在文档Tcl/Tk - keysym

中找到一些名称

但是keysymReturn + a并没有特殊的Return + ,,因为这是不寻常的组合,可能需要按住Return / Enter然后按a,。或者按Return,释放Return,然后按a,