我在idlelib
模块中查看Python程序员如何实现IDLE,并且在某些时候我在文件{{1}中找到了以下新语法:<<cut>>
或<<copy>>
}}。具体来说,该语法似乎被用作EditorWindow.py
函数的事件标识符(我认为):
bind
我不理解的是为什么它们中有很多,似乎它们是专门为该课程创建的text.bind("<<cut>>", self.cut)
:
EditorWindow
似乎我们也可以用某种方式定义我们使用这种语法text.bind("<<cut>>", self.cut)
text.bind("<<copy>>", self.copy)
text.bind("<<paste>>", self.paste)
text.bind("<<center-insert>>", self.center_insert_event)
text.bind("<<help>>", self.help_dialog)
text.bind("<<python-docs>>", self.python_docs)
text.bind("<<about-idle>>", self.about_dialog)
text.bind("<<open-config-dialog>>", self.config_dialog)
text.bind("<<open-module>>", self.open_module)
text.bind("<<do-nothing>>", lambda event: "break")
text.bind("<<select-all>>", self.select_all)
text.bind("<<remove-selection>>", self.remove_selection)
text.bind("<<find>>", self.find_event)
text.bind("<<find-again>>", self.find_again_event)
text.bind("<<find-in-files>>", self.find_in_files_event)
text.bind("<<find-selection>>", self.find_selection_event)
text.bind("<<replace>>", self.replace_event)
text.bind("<<goto-line>>", self.goto_line_event)
text.bind("<<smart-backspace>>",self.smart_backspace_event)
text.bind("<<newline-and-indent>>",self.newline_and_indent_event)
text.bind("<<smart-indent>>",self.smart_indent_event)
text.bind("<<indent-region>>",self.indent_region_event)
text.bind("<<dedent-region>>",self.dedent_region_event)
text.bind("<<comment-region>>",self.comment_region_event)
text.bind("<<uncomment-region>>",self.uncomment_region_event)
text.bind("<<tabify-region>>",self.tabify_region_event)
text.bind("<<untabify-region>>",self.untabify_region_event)
text.bind("<<toggle-tabs>>",self.toggle_tabs_event)
text.bind("<<change-indentwidth>>",self.change_indentwidth_event)
text.bind("<Left>", self.move_at_edge_if_selection(0))
text.bind("<Right>", self.move_at_edge_if_selection(1))
text.bind("<<del-word-left>>", self.del_word_left)
text.bind("<<del-word-right>>", self.del_word_right)
text.bind("<<beginning-of-line>>", self.home_callback)
的事件。
我正在使用Python 3.4。
答案 0 :(得分:1)
<<..>>
不是Python特有的。它特定于Tk widget toolkit。双V形的事件是virtual events。
编辑器窗口是一个复杂的小部件,IDLE需要处理该小部件中的许多不同事件,以便有效地实现代码编辑。
答案 1 :(得分:1)
用双重而不是单括号表示的虚拟事件是tcl / tk的一部分,当然,它们在tkinter中公开。例如,ttk.Notebook可以生成"<<NotebookTabChangede>>"
事件。
使用widget.add_event(virtual, sequence, ...)
创建虚拟活动,其中virtual
是双括号名称,每个sequence
是正常的单括号物理事件名称。删除与Widget.event_delete(virtual, sequence, ...)
的此类关联。获取w.event_info(virtual=None)
的信息。与bind
绑定虚假事件就像物理事件一样。 (我从here得到了这一切。
虚拟事件避免将物理事件硬编码为操作。在空闲,选项 - &gt;闲置偏好 - &gt;一般 - &gt;自定义键设置是一个操作和键绑定表。每个操作都是一个虚拟事件和它绑定的事件处理程序。这些是固定的,但调用事件的键绑定不是。如果更改了键绑定,则会根据需要调用event_delete和event_add(并创建或更改自定义键绑定集并保存到〜/ .idlerc / config-keys.cfg)。