这是什么&lt; <name>&gt;在Tkinter中意味着什么?</name>

时间:2014-12-16 17:28:30

标签: python python-3.x tkinter python-idle

我在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。

2 个答案:

答案 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)。