gpt4 book ai didi

linux - 键盘快捷键在 tkinter 中给我错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:34:11 25 4
gpt4 key购买 nike

我正在尝试使用 python 3 和 tkinter 创建一个文本编辑器。文本编辑器工作得很好,除了当我尝试使用键盘快捷键时。每当我使用任何快捷方式时,都会收到一条错误消息:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1699, in __call__
return self.func(*args)
TypeError: newFile() takes 0 positional arguments but 1 was given

newFile() 可以替换为 copySelected()selectAll() 或我尝试使用的任何命令。仅当我尝试使用键绑定(bind)时才会发生这种情况。它在菜单栏中工作得很好。奇怪的是,当我剪切、复制或粘贴时,我收到了它们在应用程序中实际工作的错误。下面是按键绑定(bind)代码:

textField.bind("<Command-n>", newFile)
textField.bind("<Command-N>", newFile)
textField.bind("<Command-o>", openFile)
textField.bind("<Command-O>", openFile)
textField.bind("<Command-s>", saveFile)
textField.bind("<Command-S>", saveFile)
textField.bind("<Command-n>", newFile)
textField.bind("<Command-n>", newFile)
textField.bind("<Command-z>", undo)
textField.bind("<Command-Z>", undo)
textField.bind("<Command-Shift-z>", redo)
textField.bind("<Command-Shift-Z>", redo)
textField.bind("<Command-x>", cutSelected)
textField.bind("<Command-X>", cutSelected)
textField.bind("<Command-c>", copySelected)
textField.bind("<Command-C>", copySelected)
textField.bind("<Command-v>", paste)
textField.bind("<Command-V>", paste)
textField.bind("<Command-a>", selectAll)
textField.bind("<Command-A>", selectAll)

我目前正在 Mac 操作系统上测试代码,但我已经使代码特定于操作系统,以便它也可以在 Windows 和 Linux 上运行。 Windows 和 Linux 的代码除了 Command 被 Control 替换之外完全一样。该错误发生在所有三个平台上。

非常感谢任何帮助。谢谢!

最佳答案

当您将一个键绑定(bind)到该函数时,tkinter 会自动将一个对象传递给回调。该对象表示导致调用回调的事件。它包含诸如接收事件的小部件、鼠标的 x 和 y 坐标以及事件特有的其他详细信息(鼠标按钮、键盘字符等)等信息。

当您将函数绑定(bind)到事件时,您的函数必须能够接受此参数。例如:

def newFile(event):
...

请注意,这与通过小部件的 command 属性调用该函数不同。在这种情况下,不会传递任何 event 对象。如果您希望能够通过绑定(bind)和 command 属性调用该函数,那么您可以将该参数设置为可选(并确保您的函数实际上不会尝试使用它,因为它可能不存在):

def newFile(event=None):
...

关于linux - 键盘快捷键在 tkinter 中给我错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53032521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com