【问题标题】:Python/Tkinter: Building a toolbar that provides edit cut, copy, paste commandsPython/Tkinter:构建提供编辑剪切、复制、粘贴命令的工具栏
【发布时间】:2010-11-05 23:48:15
【问题描述】:

我正在寻找有关如何使用 Tkinter 框架实现提供编辑剪切、复制、粘贴命令的工具栏的建议。我了解如何构建工具栏和绑定工具栏命令,但我对工具栏按钮绑定命令如何知道应用剪切、复制或粘贴操作的小部件感到困惑,因为具有编辑活动的小部件在单击工具栏按钮。我的第一个想法是让每个具有潜在编辑活动的小部件在小部件获得焦点时设置一个全局变量,并让其他小部件(没有编辑活动,例如按钮、滑块、复选框/单选框等)清除这个全局变量。但这听起来维护起来很复杂,除非我构建一个继承此行为的小部件框架。

有没有更简单的方法来解决这个问题,还是我走在正确的轨道上?

【问题讨论】:

    标签: python tkinter clipboard toolbar


    【解决方案1】:

    您不必维护一个大框架,您可以在根小部件上为<FocusIn> 创建一个绑定,并将所有逻辑放入该绑定中。或者,使用focus_class 并绑定到类all

    在根上绑定只会影响根的孩子,绑定到all会影响整个应用程序中的所有小部件。仅当您拥有多个顶级小部件时才重要。

    【讨论】:

    • 谢谢。这听起来像是一个非常强大的功能。类的概念是硬编码到小部件类型(条目、文本、按钮等)还是我可以基于同一个小部件创建多个命名类?
    • @Malcom:这是 tk 中保存最完好的秘密之一。这个概念被称为“绑定标签”。在谷歌上查找。基本思想是,绑定实际上是在标签上,而不是小部件上。只是widget默认有一个与widget同名的标签,加上一个与widget类同名的标签,顶层窗口,“all”。您可以添加任何其他您想要的标签,重新排序那里的标签,或完全删除它们
    • 你让我大吃一惊!了解绑定标签应该会在接下来的几个小时内破坏我的工作效率。你还向我们其他人隐藏了多少 Tkinter 的秘密? :)
    【解决方案2】:

    您可以告诉工具栏按钮不要获得焦点;这是一个配置选项,我所见过的任何 UI 指南都没有带有焦点的工具栏按钮。 (相反,该功能始终可以通过其他键盘激活机制获得,例如热键组合。)

    【讨论】:

    • 多纳尔:谢谢。为了其他读者的利益:使用 widget.config(takefocus=False) 来防止工具栏小部件获得焦点。要确定当前具有焦点的小部件(从活动窗口内),请使用 window.focus_get() 其中 window 是一个变量,其中包含对 Tk() 根窗口或当前活动顶层窗口的引用。
    猜你喜欢
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2013-05-13
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多