如何在Tcl/Tk中创建简单菜单?
当我以后写什么的时候 .win配置-菜单(此处的某些内容) 控制台向我显示消息“无效命令名tk::MenuDup”,因此我无法继续创建任何类型的菜单。我犯了什么错误?对于初学者来说,仅仅从文档中拼凑菜单是相当困难的:需要示例来理解它们是如何工作的。一旦一个人掌握了窍门,他们实际上相当直截了当 我自己不怎么使用菜单,所以我可能忘了在这里提及一些事情。不过我会尽力的。尝试阅读菜单小部件文档,了解可以做什么 基本菜单管理的基本知识 您至少需要一个菜单小部件(如果要从菜单栏中获得级联下拉菜单,则需要几个) 接下来,将一些项目添加到菜单中。命令项是最常见的:选中后,它们将执行添加项时您命名的命令。您还需要一个标签,它将成为菜单文本如何在Tcl/Tk中创建简单菜单?,tcl,tk,Tcl,Tk,当我以后写什么的时候 .win配置-菜单(此处的某些内容) 控制台向我显示消息“无效命令名tk::MenuDup”,因此我无法继续创建任何类型的菜单。我犯了什么错误?对于初学者来说,仅仅从文档中拼凑菜单是相当困难的:需要示例来理解它们是如何工作的。一旦一个人掌握了窍门,他们实际上相当直截了当 我自己不怎么使用菜单,所以我可能忘了在这里提及一些事情。不过我会尽力的。尝试阅读菜单小部件文档,了解可以做什么 基本菜单管理的基本知识 您至少需要一个菜单小部件(如果要从菜单栏中获得级联下拉菜单,则需要几个
.m add command -command filecmd -label File
.m add command -command searchcmd -label Search
.m add command -command helpcmd -label Help
当然,您也需要编写命令。这些只是虚拟程序
proc filecmd {} {tk_messageBox -message Filing!}
proc searchcmd {} {tk_messageBox -message Searching!}
proc helpcmd {} {tk_messageBox -message Helping!}
现在我们可以把菜单放在窗口里了。.win
窗口可能是一个toplevel
,即运行Tk进程创建的一个新的独立窗口。我们将把菜单放在主窗口中
. configure -menu .m
再一次,带着感觉
添加级联下拉菜单的示例
使用对话框来模拟命令是件麻烦事,我将添加一个标签,该标签将简要显示文本
grid [ttk::label .status -width 30] -sticky ew
proc status txt {
.status configure -text $txt
after 1500 [list .status configure -text {}]
}
status
命令只是将标签设置为显示文本,然后等待1.5秒并再次清空标签
下拉菜单具有“撕下”功能,可以将菜单拖走,并将其悬停在屏幕上的其他位置。TEAROF菜单在编写Tk时曾一度流行,因此默认情况下处于打开状态。您应该始终禁用tearoff功能,除非您绝对希望能够删除菜单。您可以通过为单个菜单指定它来实现这一点(此菜单只是一个示例,您不需要它来运行下面的代码):
您还可以将默认设置更改为“关闭”(我强烈建议您这样做):
现在我们创建了两个菜单,一个用于水平条的主菜单,以及一个可以从第一个菜单下拉的菜单
menu .m
menu .m.file
下拉菜单应该是主菜单的子菜单,而不是我前面写的同级菜单。同级窗口也可以工作,但可能存在某种程度的不好
第一个菜单与第一个示例中的菜单类似,但第一个项是一个级联项,而不是命令项。这意味着它不会调用命令,而是打开另一个菜单
.m add cascade -menu .m.file -label File
.m add command -command searchcmd -label Search
.m add command -command helpcmd -label Help
我们也填了第二份菜单
.m.file add command -command {filecmd new} -label New
.m.file add command -command {filecmd open} -label Open
.m.file add command -command {filecmd save} -label Save
我们需要创建命令
proc filecmd op {status "File operation {$op} selected"}
proc searchcmd {} {status "Search selected"}
proc helpcmd {} {status "Help selected"}
最后,我们将主菜单添加到主窗口。试试看
. configure -menu .m
事实上,我想我就到此为止。显然,这里的答案应该是帮助回答一个特定的问题,而不是如何描述。无论如何,以上内容应该会让你开始
传统知识文献:
Tcl文档:,对于初学者来说,仅仅从文档中拼凑菜单是相当困难的:需要示例来理解它们是如何工作的。一旦一个人掌握了窍门,他们实际上相当直截了当
我自己不怎么使用菜单,所以我可能忘了在这里提及一些事情。不过我会尽力的。尝试阅读菜单小部件文档,了解可以做什么
基本菜单管理的基本知识
您至少需要一个菜单小部件(如果要从菜单栏中获得级联下拉菜单,则需要几个)
接下来,将一些项目添加到菜单中。命令项是最常见的:选中后,它们将执行添加项时您命名的命令。您还需要一个标签,它将成为菜单文本
.m add command -command filecmd -label File
.m add command -command searchcmd -label Search
.m add command -command helpcmd -label Help
当然,您也需要编写命令。这些只是虚拟程序
proc filecmd {} {tk_messageBox -message Filing!}
proc searchcmd {} {tk_messageBox -message Searching!}
proc helpcmd {} {tk_messageBox -message Helping!}
现在我们可以把菜单放在窗口里了。.win
窗口可能是一个toplevel
,即运行Tk进程创建的一个新的独立窗口。我们将把菜单放在主窗口中
. configure -menu .m
再一次,带着感觉
添加级联下拉菜单的示例
使用对话框来模拟命令是件麻烦事,我将添加一个标签,该标签将简要显示文本
grid [ttk::label .status -width 30] -sticky ew
proc status txt {
.status configure -text $txt
after 1500 [list .status configure -text {}]
}
status
命令只是将标签设置为显示文本,然后等待1.5秒并再次清空标签
下拉菜单具有“撕下”功能,可以将菜单拖走,并将其悬停在屏幕上的其他位置。TEAROF菜单在编写Tk时曾一度流行,因此默认情况下处于打开状态。您应该始终禁用tearoff功能,除非您绝对希望能够删除菜单。您可以通过为单个菜单指定它来实现这一点(此菜单只是一个示例,您不需要它来运行下面的代码):
您还可以将默认设置更改为“关闭”(我强烈建议您这样做):
现在我们创建了两个菜单,一个用于水平条的主菜单,以及一个可以从第一个菜单下拉的菜单
menu .m
menu .m.file
下拉菜单应该是主菜单的子菜单,而不是我前面写的同级菜单。同级窗口也可以工作,但可能存在某种程度的不好
第一个菜单与第一个示例中的菜单类似,但第一个项是一个级联项,而不是命令项。这意味着它不会调用命令,而是打开另一个菜单
.m add cascade -menu .m.file -label File
.m add command -command searchcmd -label Search
.m add command -command helpcmd -label Help
我们也填了第二份菜单
.m.file add command -command {filecmd new} -label New
.m.file add command -command {filecmd open} -label Open
.m.file add command -command {filecmd save} -label Save
我们需要创建命令
proc filecmd op {status "File operation {$op} selected"}
proc searchcmd {} {status "Search selected"}
proc helpcmd {} {status "Help selected"}
最后,我们将主菜单添加到主窗口。试试看
. configure -menu .m
事实上,我想我就到此为止。显然,这里的答案应该是帮助回答一个特定的问题,而不是如何描述。无论如何,以上内容应该会让你开始
传统知识文献:
Tcl文档:,我们需要了解很多