Tk 9.0b1菜单模块Bug问询:移除-underline选项触发Alt+按键错误
Tk 9.0b1 菜单Alt快捷键触发索引错误的修复方案
问题根源
Tk 9.0b1的MenuFind过程(位于tk9.0b1/library/menu.tcl)未对菜单条目的-underline属性值做有效性校验:当条目未设置-underline(返回空字符串)或设置为-1时,直接将该值传入string index命令,触发非法索引错误。
修复步骤
- 打开
tk9.0b1/library/menu.tcl文件,定位到MenuFind过程中对应报错的代码段(即原第19行附近)。 - 找到原代码:
string index [$child entrycget $i -label] [$child entrycget $i -underline]
- 替换为以下带有效性校验的代码:
set underline [$child entrycget $i -underline] # 跳过无效的下划线索引(空值或负数) if {$underline eq "" || $underline < 0} { continue } set char [string index [$child entrycget $i -label] $underline]
- 保存文件后重新运行demo,验证问题是否解决。
修复原理
新增对-underline值的有效性判断:
- 若值为空(未设置该属性)或小于0(明确指定无下划线),则跳过当前菜单条目的快捷键匹配逻辑
- 仅当值为非负整数时,才执行
string index获取对应字符,彻底避免非法索引操作
验证效果
修改后:
- 移除
menu.tcl中所有-underline选项,按下Alt+任意键不再触发错误 - 设置
-underline -1时,菜单正常显示且无快捷键冲突错误 - 保持
-underline 999的正常工作状态(无下划线且无错误)
内容的提问来源于stack exchange,提问作者Alex P
相关产品推荐
相关产品推荐

