gpt4 book ai didi

tcl - 错误 : unknown option "-state" occurs when running a script named button.

转载 作者:行者123 更新时间:2023-12-01 12:28:24 28 4
gpt4 key购买 nike

我创建了一个简单的脚本来试用 Tk 按钮小部件,但遇到了意外错误。

#!/usr/bin/env tclsh
package require Tk

set w .demo
toplevel $w

ttk::button $w.ok -text OK -command {puts "OK Pressed"}
grid $w.ok

当我运行它时,我得到两个窗口:一个由 package require Tk 命令创建的窗口在标题栏中称为“button”(因为我将脚本命名为“button.tcl” ) 和另一个由 toplevel $w 命令创建并在标题栏中称为“demo”。

“演示”顶层窗口的行为符合预期。如果我单击“确定”按钮,它会执行脚本命令。问题是,如果我将鼠标移到“按钮”窗口内,则会出现以下错误对话框:

错误:未知选项“-state”

详情>>

unknown option "-state"
unknown option "-state"
while executing
"$w cget -state"
(procedure "tk::ButtonEnter" line 3)
invoked from within
"tk::ButtonEnter ."
(command bound to event)

Failing button application with error message

我正在使用 ActiveTcl 8.6.4.1 和 Windows 8。我还尝试了运行它的变体,例如使用 wish 解释器而不是 tclsh,离开 package require Tk,使用其他小部件代替等。

唯一奇怪的是,如果我将脚本文件重命名为“button.tcl”以外的其他名称,则不会出现错误,这解决了眼前的问题,但仍然给我留下了疑问:

  1. 为什么当脚本恰好被称为“button.tcl”时会发生这个错误?
  2. 如果对脚本文件使用名称“button.tcl”存在潜在问题,是否还有其他我应该注意的此类文件名?

最佳答案

摘自 Brent B. Welch 等人的“Tcl 和 Tk 实用编程”,第 476 页:

Don't use widget names for script names.
The application class name becomes the class name for the main toplevel window. For example, if you use a script name like button.tcl, the class for . becomes Button. This causes it to inherit all the standard Button bindings and attribute values, which can cause problems in your application.

查看 tk8.6 库中的 button.tcl,问题很明显。此脚本将类 ButtonEnter 事件绑定(bind)到以窗口名称作为参数的 tk::ButtonEnter 调用。在 tk::ButtonEnter 中,查询窗口的 -state 选项值。由于您的脚本名为 button.tcl,因此当鼠标进入您的主窗口时将触发此绑定(bind)。

关于tcl - 错误 : unknown option "-state" occurs when running a script named button.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37087930/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com