Python/Tkinter:构建一个提供剪切、复制、粘贴命令的工具栏

0 投票
2 回答
1081 浏览
提问于 2025-04-16 06:38

我在寻找一些建议,想知道如何使用Tkinter框架实现一个工具栏,这个工具栏可以提供编辑、剪切、复制和粘贴的功能。我知道怎么构建一个工具栏并绑定命令,但我有点困惑的是,当点击工具栏按钮时,绑定的命令怎么知道应该对哪个小部件(widget)执行剪切、复制或粘贴操作,因为这个小部件在点击工具栏按钮时会失去焦点。我的第一个想法是,让每个可能进行编辑的小部件在获得焦点时设置一个全局变量,而其他没有编辑功能的小部件(比如按钮、滑块、复选框/单选框等)则清除这个全局变量。但这样听起来维护起来会很复杂,除非我构建一个继承这种行为的小部件框架。

有没有更简单的方法来解决这个问题,或者我是不是在正确的方向上?

2 个回答

2

你不需要维护一个庞大的框架,你可以在根部件上创建一个单一的绑定,用于 <FocusIn> 事件,并把所有的逻辑放在这个绑定里。或者,你可以使用 focus_class,并绑定到类 all

在根部件上绑定只会影响根部件的子部件,而绑定到 all 则会影响整个应用中的所有部件。这一点在你有多个顶层部件时才重要。

1

你可以设置工具栏按钮不获取焦点,这是一种配置选项。我见过的用户界面指南里,工具栏按钮通常都是不会有焦点的。相反,它们的功能通常可以通过其他一些可以用键盘激活的方式来实现,比如快捷键组合。

撰写回答