Python/Tkinter:构建一个提供剪切、复制、粘贴命令的工具栏
我在寻找一些建议,想知道如何使用Tkinter框架实现一个工具栏,这个工具栏可以提供编辑、剪切、复制和粘贴的功能。我知道怎么构建一个工具栏并绑定命令,但我有点困惑的是,当点击工具栏按钮时,绑定的命令怎么知道应该对哪个小部件(widget)执行剪切、复制或粘贴操作,因为这个小部件在点击工具栏按钮时会失去焦点。我的第一个想法是,让每个可能进行编辑的小部件在获得焦点时设置一个全局变量,而其他没有编辑功能的小部件(比如按钮、滑块、复选框/单选框等)则清除这个全局变量。但这样听起来维护起来会很复杂,除非我构建一个继承这种行为的小部件框架。
有没有更简单的方法来解决这个问题,或者我是不是在正确的方向上?
2 个回答
2
你不需要维护一个庞大的框架,你可以在根部件上创建一个单一的绑定,用于 <FocusIn>
事件,并把所有的逻辑放在这个绑定里。或者,你可以使用 focus_class
,并绑定到类 all
。
在根部件上绑定只会影响根部件的子部件,而绑定到 all
则会影响整个应用中的所有部件。这一点在你有多个顶层部件时才重要。
1
你可以设置工具栏按钮不获取焦点,这是一种配置选项。我见过的用户界面指南里,工具栏按钮通常都是不会有焦点的。相反,它们的功能通常可以通过其他一些可以用键盘激活的方式来实现,比如快捷键组合。