- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个简单的脚本来试用 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)
我正在使用 ActiveTcl 8.6.4.1 和 Windows 8。我还尝试了运行它的变体,例如使用 wish
解释器而不是 tclsh
,离开 package require Tk
,使用其他小部件代替等。
唯一奇怪的是,如果我将脚本文件重命名为“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
,问题很明显。此脚本将类 Button
和 Enter
事件绑定(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/
我是一名优秀的程序员,十分优秀!