一、是什么(What)?

TCL(Tool Command Language)是一种脚本语言,一种易于学习的动态程序语言。特点是:跨平台、开源、易扩展。

Tcl Developer Site 站点对Tcl的描述:

Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, suitable for a very wide

range of uses, including web and desktop applications, networking, administration, testing and many more. Open source and

business-friendly, Tcl is a mature yet evolving language that is truly cross platform, easily deployed and highly extensible.

Tk 是一个跨平台、开放源代码的图形用户界面开发工具。Tk与Tcl一样都是由C函数库实现的。

Tcl Developer Site 站点对Tk的描述:

Tk is a graphical user interface toolkit that takes developing desktop applications to a higher level than conventional approaches.

Tk is the standard GUI not only for Tcl, but for many other dynamic languages, and can produce rich, native applications that run

unchanged across Windows, Mac OS X, Linux and more.

二、可以干什么(use to do)?

Tcl常被用于快速原型开发、脚本编程、GUI 、测试方面。

Tk则是一个标准GUI工具包,用于程序界面开发。Tcl&Tk都是由一个C函数库实现的。

三、如何开始(how to start)?

了解了语言特性和基本语法之后,一边写代码,一边解决遇到的问题。也可以跟着官网的Tutorial学习,或者拿官网的例子来研究。 开发环境

安装,需要从Tcl Developer Site上下载版本。解压缩:tar  -xzvf  packagename.tar.gz、upzip packagename.zip;

预编译:./configure  --prefix=自定义程序安装目录;    编译:make;    安装:sudo make install;安装好后,在终端尝试命令:which  tclsh 得到

Tcl解释器的安装路径,which wish得到Tk解释器的安装路径。 而tclsh是Tcl的解释器、wish是Tk的解释器。

四、实验例子

以前用Wxwidgets写过图像处理程序的GUI,感觉Wxwidgets就挺好用的。不管是一行行写界面还是用wxSmith、

wxGlade、wxFormBuilder工具画界面,都很流畅。下面的例子用Tk做类似的界面,目的是熟悉Tcl&Tk,做对比式学习。

下面是Tk写的一个界面,包括一个菜单栏和几个菜单项。

#! /usr/bin/wish -f
# Name:guiDemo.tcl
# Purpose:tcl/tk gui demo
# Author:Bruce
# Created: 2013-04-30
# Copyright:none
# License:none#Before you Start
option add *tearoff 0#Creating a Menubar
toplevel  .win
menu .win.menubar
.win configure -menu .win.menubar#Adding Menus
set m .win.menubar
menu $m.文件
menu $m.编辑
$m add cascade -menu $m.文件 -label 文件
$m add cascade -menu $m.编辑 -label 编辑
$m add cascade -label Help -menu [menu $m.help]#Adding Menu Items
$m.文件 add command -label "新建" -command ".."
$m.文件 add command -label "打开" -command ".."
$m.文件 add command -label "关闭" -command ".."$m.编辑 add command -label "最大化" -command ".."
$m.编辑 add command -label "最小化" -command ".."

下面是使用Wxwidgets库的界面程序代码,只包含了菜单栏和菜单项。

#include "Main.h"
#include <wx/bitmap.h>
#include <wx/intl.h>
#include <wx/image.h>
#include <wx/string.h>
#include <wx/msgdlg.h>
#include <wx/wxprec.h>
#include <wx/filedlg.h>
#include <wx/wx.h>
#include <wx/frame.h>//
enum wxbuildinfoformat
{short_f, long_f
};wxString wxbuildinfo(wxbuildinfoformat format)   //构建信息
{wxString wxbuild(wxVERSION_STRING);if (format == long_f ){
#if defined(__WXMSW__)wxbuild << _T("-Windows");
#elif defined(__UNIX__)wxbuild << _T("-Linux");
#endif#if wxUSE_UNICODEwxbuild << _T("-Unicode build");
#elsewxbuild << _T("-ANSI build");
#endif }return wxbuild;
}const long MainFrame::idMenuOpen = wxNewId();
const long MainFrame::idMenuSave = wxNewId();
const long MainFrame::idMenuCut = wxNewId();
const long MainFrame::idMenuVar = wxNewId();BEGIN_EVENT_TABLE(MainFrame,wxFrame)    //事件表
END_EVENT_TABLE()
MainFrame::MainFrame(wxWindow* parent,wxWindowID id){ // 初始化
wxMenuItem* MenuItem1;
wxMenuItem* MenuItem2;
wxMenuItem* MenuItem3;
wxMenuItem* MenuItem4;
wxMenu* Menu1;
wxMenuBar* MenuBar1;
wxMenu* Menu2; Create(parent, id, _("GUI_Demo"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("id"));
SetMinSize(wxSize(-1,-1));
MenuBar1 = new wxMenuBar();
Menu1 = new wxMenu();
MenuItem1 = new wxMenuItem(Menu1, idMenuOpen, _("打开\tCtrl-O"), _("打开文件"), wxITEM_NORMAL);
Menu1->Append(MenuItem1);
MenuItem2 = new wxMenuItem(Menu1, idMenuSave, _("保存\tCtrl-S"), _("保存为BMP文件"), wxITEM_NORMAL);
Menu1->Append(MenuItem2);
MenuBar1->Append(Menu1, _("文件"));
SetMenuBar(MenuBar1);
Menu2 = new wxMenu();
MenuItem3 = new wxMenuItem(Menu2, idMenuCut, _("剪切\tCtrl-X "), _("剪切处理"), wxITEM_NORMAL);
Menu2->Append(MenuItem3);
MenuItem4 = new wxMenuItem(Menu2, idMenuVar, _("粘贴\tCtrl-V"), _("粘贴处理"), wxITEM_NORMAL);
Menu2->Append(MenuItem4);
MenuBar1->Append(Menu2, _("编辑")); //链接到事件处理函数
Connect(idMenuOpen,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&MainFrame::OnMenuItemOpen);
Connect(idMenuSave,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&MainFrame::OnMenuItemSave);
Connect(idMenuCut,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&MainFrame::OnMenuItemCut);
Connect(idMenuVar,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&MainFrame::OnMenuItemVar);}MainFrame::~MainFrame(){
//
}void MainFrame::OnMenuItemOpen(wxCommandEvent& event) //打开事件
//"文件->打开"菜单
{}void MainFrame::OnMenuItemSave(wxCommandEvent& event) //保存事件
//"文件->保存"菜单
{}void MainFrame::OnMenuItemCut(wxCommandEvent& event)  //剪切事件
//"编辑->剪切"菜单
{}void MainFrame::OnMenuItemVar(wxCommandEvent& event)  //粘贴事件
//"编辑->粘贴"菜单
{}

对比:实现类似的界面。从代码量来看,Tcl&Tk明显占优。但是感觉Wxwidgets的那些代码可能更容易读懂。

修订:

参考文档:

Tcl维基百科:https://zh.wikipedia.org/wiki/Tcl

Tcl Developer Site:http://www.tcl.tk/

Tcl Tutorial:http://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html

Tk Tutorial:http://www.tkdocs.com/tutorial/index.html

注:

下一篇主要是Tcl语法方面的内容。

Tcl/Tk入门(上)相关推荐

  1. Tcl/Tk入门(中)

    编写Tcl脚本之前,必须学会两件事: 1).必须学会Tcl语法,其内容是决定如何解析命令规则: 2).必须掌握在脚本中使用的独立命令(Tcl提供了近百条内建命令,Tk提供几十条). 第一部分 Tcl语 ...

  2. Tcl/Tk教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 Tcl 是"工具控制语言(Tool Command Language)"的缩写,其面向对象为otcl语言.Tk 是 Tcl"图形工具箱"的扩展,它提供 ...

  3. Tcl/Tk string详解

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 这里对s ...

  4. 1.TCL/TK脚本学习——入门基础

    1.TCL/TK脚本学习--入门基础 Tcl/Tk有两个主要程序.是 tclsh 和 wish.前者是 Tcl 外壳,常用于为外壳脚本提供执行环境.Wish 类似于 tclsh,它是针对窗口化的 GU ...

  5. vs code上配置tcl/tk语言开发环境

    vs code上配置tcl/tk语言开发环境 基础软件 Tcl语言编译器 Active Tcl 文本编辑器 Visual Studio Code 语法高亮.语法提示支持 安装Tcl语言支持插件: 配置 ...

  6. Tcl/Tk 快速入门

    2019独角兽企业重金招聘Python工程师标准>>> 关于本教程 谁应该学习本教程? 本教程是针对那些具有一种或多种编程或脚本语言经验的人员设计的.可以在几种平台(包括 Win32 ...

  7. Tcl/tk缩放Truetype字体时的精度问题

    最近有国内新客户抱怨我们产品显示的原理图太不专业了,在原理图上使用宋体GB2312设计好中文图表,经过几次缩放时,表格内的文字居然会跑到表格外边,更要命的是打印出来的文档也存在同样的问题. 我研究了一 ...

  8. linux tcl是什么系统,基于Linux 及Tcl / Tk 的数控系统人机界面的实现

    随着嵌入式系统的迅速发展和广泛应用,嵌入式Linux以其强大的性能和开放性,越来越被开发人员所推崇.现在,各种基于Linux的嵌入式系统已被用于各行各业中.其中,人们对基于嵌入式实时Linux平台的开 ...

  9. Perl/Tkx ---- tcl/tk文本组件text

    tcl/tk text组件命令解析 使用text组件对文件编辑 tcltk text组件命令解析 text命令创建文本组件 文本索引 文本标记 标记选项 标记优先级 标记绑定 搜索与替换 虚拟事件 撤 ...

最新文章

  1. 废掉一个程序员最好的方法,让他忙碌着,忙碌到没时间思考
  2. 策略模式和工厂模式的区别_设计模式之工厂模式-工厂方法模式
  3. 关于Lambda和匿名内部类
  4. 解决IE为7939.com的病毒~
  5. 前端学习(1286):node运行环境安装失败
  6. Flink SQL 功能解密系列 —— 流式 TopN 挑战与实现
  7. comet4j简单应用、文档教程
  8. catia怎么进入装配_catia怎么装配步骤
  9. git下载出错GnuTLS recv error (-54): Error in the pull function
  10. 【保研记录】预推免面试可能遇到的问题(偏计算机)
  11. 饮食结构思维导图模板
  12. 关于AutoCAD软件的PDF打印机的问题
  13. 冯唐易老,李广难封——2010世界杯印象之五星巴西队
  14. [放遗忘]PR进行视频剪辑的两种办法
  15. 交换机基本原理和配置
  16. 《c 语言程序设计》宝钏,【黄钟】醉花阴_宝钏松金髻
  17. A-Weighting(A计权网络)
  18. 双十一自动领喵币工具
  19. R语言学习 文本处理
  20. 网页注册页面html代码,网页代码

热门文章

  1. 微信小程序最新获取头像和昵称的方法 直接用!
  2. 按日期循环执行impala sql脚本
  3. 秦刚推荐:做流量的本质就是做用户
  4. python往npy写入数据_操作python实现npy格式文件转换为txt文件
  5. Maven学习(一) --------- Maven 简介
  6. 圆周率 java编程_Java编程中实现计算圆周率的方法
  7. 深度学习框架tensorflow学习与应用——代码笔记11(未完成)
  8. torch.cumsum(),torch.sum()
  9. 黑马程序员机器学习Day2学习笔记
  10. 国家气象局提供的天气预报接口