这微信出现异常怎么回事事 我家TCL有时右边出现一个框然后就退回主界面了

推荐tcl家电集团论文题目阅读
热门飞龙家电集团有限公司论文参考资料阅读
同类论文推荐TCL电视在收看时出现一半屏幕有图像一半无图像是什么原因_百度知道
TCL电视在收看时出现一半屏幕有图像一半无图像是什么原因
  TCL电视在收看时出现一半屏幕有图像一半无图像是原因:  1,如果上部没图像是泵电源电压、电容或场块有问题,如果是下部无图像是场输出电路有故障,是电容有问题。  2,没信号。
采纳率:98%
来自团队:
如果上部没图像是泵电源电压、电容或场块有问题,如果是下部无图像是场输出电路有故障,是电容有问题
为您推荐:
其他类似问题
tcl电视的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。除了自己的无知,我什么都不懂。
-苏格拉底
以来本文点击数11,278
本站点击数17,662,703
昨日点击数 4,872
今日点击数 1,682
- 卢昌海 -
本软件编写迄今已近六年, 由于最近几年我未再使用 Tcl/Tk, 也未对本软件进行更新,
因此本软件所能识别的 Tcl/Tk 的关键词想必已不全。 不过用户可以按照软件内的说明自行添加关键词。
我尚未在 Windows Vista 上运行过本软件, 如果哪位用户试过, 欢迎告知结果。
此外, 三年多前曾有一位中文用户来信提及过一个问题, 我将解决办法作为补注附在文末了。 []
一. 背景介绍
Tcl2Html 是本人编写的一个小软件, 它能把 Tcl/Tk 的源程序转变成 HTML 文件, 便于在网上交流程序。
编程的人可能对 C/C++、 Java、 C# 等所谓的 System Language 比较熟悉,
Tcl/Tk 则属于一类被称为 “Scripting Language” 的 “另类” 语言。
其实说 Scripting Language 另类有些冤枉, 因为一来 Scripting Language
的历史之悠久并不亚于 System Language,
自二十世纪六十年代以来两者就并存于各操作系统之中; 二来
Scripting Language 家族中的 VBScript、 Perl 等传播之广也不在 System Language 之下,
而后起之秀诸如 Python、 Ruby 等也为写书人赚了不少银子。
不过 Tcl/Tk 对大多数人来说确实算是比较陌生。
Tcl/Tk 由核心语言部分 Tcl 和界面编程部分 Tk 所组成, 除此之外还有许多其它软件包可供下载。
与其它 Scripting Language 类似, 用 Tcl/Tk 编程远比用
System Language 方便。 以 C 语言为例, 据统计每一行 C 程序平均对应于
5 行汇编语言指令, 而对于 Tcl/Tk 来说, 这一数字是 100 到 1000!
也就是说一行 Tcl/Tk 程序平均对应于数十行乃至上百行 System Language 程序。
别的倒也罢了, 在编写用户界面 (GUI) 方面, Tcl/Tk 委实可以让埋首于
MFC、 Java 等的人有耳目一新之感。 即使考虑到
VC++、 Java、 C# 等各有大型的 (很不幸也都是昂贵的) 编程环境 (IDE) 的支持,
Tcl/Tk 在编程简洁性上依然有其独特的优势。 尤其是在必须直接对源程序进行修改的时候,
用 IDE 产生的程序往往因为含有冗余 code 而给阅读和修改带来额外的复杂性。
这时候逻辑清晰、 语法简明的 Tcl/Tk 所具有的优势就颇为明显。
由于 Tcl/Tk 在界面编程方面的长处,
目前流行的几种主要的 Scripting Language, 比如 Perl 和 Python,
在界面编程上都采取了仿照 Tcl/Tk 的方法。 由于 Python 是最近才流行的,
Perl 也是在较新的版本中才有所谓 Perl-Tk 的, 在这些语言还不存在,
或还没有与 Tcl/Tk 相似的界面编程功能的时候, Tcl/Tk 的 “大隐于市” 实在是编程界的一种奇怪的现象。
或许是因为传统上人们认为 Scripting Language 只是用来处理文本数据的缘故吧,
也或许是由于 Scripting Language 的运行速度较慢,
在计算机硬件不发达的时候往往达不到人们对运行速度的要求。
而今天, 硬件的发展使得速度瓶颈对许多软件来说已不复存在,
这给 Scripting Language 创造了在更多方面与 System Language
争锋的机遇。 即使有 Perl 和 Python 等语言的竞争, Tcl/Tk 依然有其便利之处,
语言功能的比较或许是各有千秋, 但对于业余编程的人来说,
Tcl/Tk 的一个有利之处, 就是它有一些很不错的免费编译器,
其中最出色的是 TclPro, 它是一个商业软件, 但 TclPro 1.4 (含 Tcl/Tk 8.3.2)
可以免费下载, 它们可以将 Tcl/Tk 编译成可执行文件。
编译器对于象 C++ 这样的 “编译型” 语言自然不新鲜,
但 Scripting Language 通常是由所谓的 Interpreter 来执行的,
因而要求用户机器安装相应的 Interpreter,
这样的一层额外要求对于软件的传播带有不可忽视的负面影响。 因此拥有象 TclPro 这样的编译器,
从而免除用户安装 Tcl/Tk Interpreter 的麻烦, 是 Tcl/Tk 的一个显著优势。
王婆卖瓜吆喝了半天, 除了真心实意要替 Tcl/Tk 呐喊几声外,
也是为 Tcl2Html 作点背景介绍。 如果你从来没有用过 Tcl/Tk 的话,
不妨试着用一下, Tcl/Tk 的 Interpreter 是可以免费下载的。
你会发现学习 Tcl/Tk 比 C++、 Java、 C# 等容易多了, 很值得一试。
顺便说一下 Tcl2Html 本身就是用 Tcl/Tk 编写, 并用 TclPro 编译的。
希望这个小软件能对 Tcl/Tk 在网上的传播交流起到一些帮助。
二. 用户界面
The Main Screen
The Font/Color Preference
The Style Preference
The Indentation Preference
三. 效果展示:
以下文件便是用 Tcl2Html 1.0 产生的 HTML 文件的显示效果:
四. 下载及使用
(zip 文件, 1.7MB), 解压缩后直接运行 tcl2html.exe 即可。
您可在每月前七天参与对本站所有文章的讨论目前距本文的讨论期满尚有 7 天, 欢迎您环球企业家:TCL有没有走上西门子之路_网易科技
环球企业家:TCL有没有走上西门子之路(全文)
用微信扫码二维码
分享至好友和朋友圈
连续三年的低迷业绩之后,人们似乎已经不再试图从李东生那里获得好消息了。
自从2004年初李率领接连完成与汤姆逊、的合资,外界收到了太多空头支票:收购之初,他曾仿佛强调在“18至24个月扭亏”,甚至,李曾无比乐观的寄望,TCL阿尔卡特的手机业务在2004年当年实现收支平衡;但一年过去,两家公司的亏损之势不减,让李不得不再度将扭亏时期延长18个月;即使到了2006年中,也就是整合TCL-汤姆逊公司30个月之后,TCL多媒体的欧洲业务仍在半年内巨亏7.63亿元人民币。
怀疑李的决策和能力?即使李东生本人也一度有此想法。日,他在与《环球企业家》的访谈中很坦率的表示:“2005年我的压力非常大,甚至怀疑自己的能力。一方面怀疑决策是不是错了,另一方面怀疑自己的能力是不是不能驾驭这个事情。”
造成这种自我质疑的,不仅是业绩不见好转,更实质的压力还有:以往TCL每次遇到重大挑战,两三个月间即可找到解决问题的方法,但国际化过程中,近在咫尺的问题却用一年的时间也无从改变。而且,为扭转局面,李做出了频繁的换将:TCL移动通信有限公司总经理万明坚、TCL集团首席运营官袁信诚、TTE公司CEO赵忠尧、TTE中国业务中心执行董事长胡秋生、财务总监吕忠丽……用李自己的话说:“要一些跟我一起创业的老兄弟退到二线,虽然他们会理解和接受,但是我心里还是会很难受。”
这种感受可谓严酷而漫长。在李东生行将五十而知天命时,他常常失眠,体重也骤减8公斤。但他的想法只有一个:坚持。
“我要退回来很简单,我把美国业务欧洲业务关掉以后我马上赚钱了,但这不是我想要的。我还是要把欧洲和美国的业务做成,别人都还没有这个机会”,李说。
某种程度上,正是依靠这种骄傲而坚韧,李在国内商界获得了超越多数同龄人的尊重。40岁初,李已经带领偏居于惠州的TCL悄然崛起,2001年,本刊曾这样总结:“TCL在人们不知不觉间成为了国内第三品牌”。而在李率先成为中国企业国际化的试水者之后,在与本刊记者沟通时,一向以骄傲称的张朝阳将李列为自己佩服的企业家,并补充了一句:“你忘了他跟我是一代人吗?”
质疑他,或者同情他,无可否认,李东生所坚持的国际化路线,的确属于其一代人的梦想。与TCL隔海相望的,也是在54岁的李耀带领下,展开了同样惊险的国际化跃进。但比起明基快而惨烈的悲剧式收场,TCL的坚持似乎显得更有意义:在这次让所有观察人士丧失耐心的3年调整期中,TCL似乎真的逐渐找到了一些国际化方法。这一点,至少在其手机业务,已经略有显现。
因为TCL在国内手机市场开始收复失地,且找到在海外市场通过与运营商的捆绑销售的模式,2006财年,TCL阿尔卡特获得利润1500万港币。虽然这个数字本身缺乏惊喜,但比起亿港币的亏损,已经可谓“U字型转折点”。这终于让李可以更加从容的思考下一步。
“现在谈TCL成为我们真正的对手还无意义,但它和自己相比,已经和五年前完全不一样了”,一位跨国手机制造商的中国区总裁对本刊表示。
应该说,通讯的“翻身”的关键首先来自于一份诊断报告。
在和合资后不久,原本在国内一直处于本土品牌市场份额排名第一的TCL——2003年TCL通讯盈利8亿元,2004年上半年亦有大量盈利——突然在2004年第四季度业绩大幅度下滑。这一方面和国内手机行业发生巨变有关,另一方面也因为李东生和管理层对阿尔卡特和海外手机市场实际缺乏了解。
当时的本土市场正在实施牌照准入制,包括TCL在内的九家自由牌照的厂商很快就陷入了与贴牌厂商的混战中;此外外资品牌也开始学习TCL、等渠道下沉的方式,在短时间内就占领了国产品牌原有的阵地。而海外市场,李东生事后承认,因为当时主要精力都花在和汤姆逊的收购上,只是看了TCL移动总经理万明坚的分析报告后,就认为阿尔卡特是销售型为主的公司,主要资产是不到1000人的销售和研发人员,因此合资后会相对容易成功。
结果国内市场持续低迷,加之海外市场研发人员的成本过高,财务一下陷入之前任何TCL高管都不曾预期的“黑洞”,在头四个月,亏损额高达到2亿多港元。这直接诱发了曾经为TCL手机立下汗马功劳的万明坚下课,取而代之的是万明坚大学时代的师兄、曾在美国公司有过工作经历的海归派刘飞。刘飞此前曾是TCL的员工,2002年因为和万明坚理念分歧出走,在TCL原老王道源的资助下创建手机设计企业精诚通科技有限公司,员工达到130人,年收入过亿。
在安排这一人事变动时,李东生首先征询了万明坚的意见,万当即表示同意。李自称,当刘飞开始正式来上班时候,“是我让万明坚离开的。”
身材高大,自称喜欢战略而非细节的刘飞回到TCL后,得到了没有退路的李东生的重用。不容忽视的事实是,在2005年到2006年TCL总部进行收权,连续有数位高管离职或退居二线时,刘飞反而得到了李东生的充分授权。尤其是刘飞提出的要拯救TCL通讯两个必备条件——迅速能驾驭局面的管理团队和出色的本土市场成绩——都得到了李东生的高度认同,并放手让刘飞安排管理团队,同意将原设计公司的主力带到TCL。
在来回法国和上海数次考察之后,刘飞给李东生提交了一份研究报告,详细分析了目前合资公司的治理结构、阿尔卡特的成本构成、供应链情况等。并由此提出了一个将此前中外方持股比例为55:45的合资公司变成由TCL通讯的全资附属子公司的方案。此举目的一方面在于加强TCL的主导权,另一方面也希望借此来消减成本。
李东生很快同意这个方案,并组成了一个由他自己、集团副总裁严勇和刘飞组成的谈判小组,和阿尔卡特全球副总裁兼移动通信事业部总裁尹天福(EtienneFouques)在香港开始了谈判,双方花了整整三个月,“过程非常困难,经常谈到晚上两三点。”
此过程中,不为外界所知的转折点是,TCL发现最初进行合资时,阿尔卡特提供的各方面数据和后来真实的情况实际有所出入。在谈判时,TCL认为这是造成亏损的一个原因。对此阿尔卡特后来也不得不承认自己有处理不当的地方,因此作为某种程度上的补偿,再加上阿尔卡特也意识到,如果不进行重组,最终有可能是双输的局面。因而同意只持有TCL通讯的4.8%的股份,同时再度注资2000万欧元现金。由此阿尔卡特从最初的合资方变成了战略投资者,而TCL则能够开始按照自己的思路经营新公司,尤其是能将两个不同品牌分开运营,而非像-西门子那样使用双品牌。
该结果对TCL意义重大,TCL由此可以不用着急短期内在全球范围树立自己的品牌,这为TCL节省了大量的推广费用,同时避免了阿尔卡特工会带来的麻烦——尽管事后小部分法国员工曾罢工表示抗议——尤其和明基收购西门子手机业务后,因为对德方员工裁员处理不当而引起的负面效应相比,TCL在此方面并没有受到太多的诟病。这为它开始下一步的计划打好了基础。
“这样的结果完全达到了我最初的预期”,刘飞对《环球企业家》说。
另一个被TCL内部视为关键的步骤是,通过与阿尔卡特的重新谈判,TCL成功的将后者开支最大的研发人员费用转移——阿尔卡特将接受400名员工,此举为TCL节省了大概为6亿人民币左右的费用。而这也被外界普遍视为比明基-西门子的高明之处,因为后者正是因为裁员问题,而引发了德国当地工会的罢工。
但在刘飞眼中,这仍然并非重点。在接管TCL通讯后,刘飞发现实际TCL最核心竞争力——在制造方面拥有低成本优势——并非如同外界想象的那样强大。这一点包括诺基亚、摩托罗拉等跨国公司后来也都有所发现,因为相较跨国公司可以动用在中国台湾、东南亚、南美等地全球供应链资源,在世界各地寻找最合适的成本,TCL实际只能在中国大陆市场,更准确地说华南珠三角一带拥有相对便宜的原材料和人力。具体到产品层面,实际TCL只是在一些低端机型上可以采购到便宜的零部件,很多高端机型的材料都必须到价格昂贵的欧洲日本市场购买,这样算下来,实际成本并不低。
即使是在将TCL和阿尔卡特的合资公司变成TCL通讯的子公司后,TCL实际仍不能做到如同诺基亚和摩托罗拉那样自如调动全球供应链资源,因为阿尔卡特实际的强势地区只集中在欧洲和南美,其在欧洲市场曾创造过一个季度突破400万台出货量的纪录,在南美市场,也一直稳居第三。这些地区TCL的整合力度实际还没有完全到位,更重要的是,因为来自法方的成本过高,这也大大阻缓了整合的进程。
因此将400名法国员工“还给”阿尔卡特,在刘飞看来,表面是截流,但实际是优化供应链管理的第一步。可以证明的数字是,最初没有裁员的时候,阿尔卡特研发一款手机要1.3亿元人民币,但现在只需要3000万元人民币就可以做到了,而TCL的计划是两年后只要1000万。
刘飞随之总结经验,认为跨国手机企业真正的竞争力就在于供应链的整合,因此接下来TCL通讯在生产、采购、营销等方面都围绕最优化的供应链开展。比如其在广东省惠州市建立年产能力2000万台制造基地,计划和阿尔卡特在苏州的工厂进行整合,以建成全球性的生产中心;其在墨西哥和巴西的代工厂,则主要满足当地的需要。
营销方面,TCL通讯在全球建立了EMEA、LATAM、India、APAC、ODM、TCLCN、AlcatelCN等七大业务中心,海外市场主要通过和沃达丰、Orange、Telefonica和TIM等30多家世界主流运营商合作销售。从2005年9月开始,总销量终于突破百万部,其中海外销量接近62万部;10月的海外销量更是达到了国内销量的4倍还多,达到86.7万部。2006年,海外销量更是增长到近1000万部,其中主要集中在南美洲和欧洲。
在某种程度上,对供应链初步成功的整合也是靠双方不断适应和融合换来的。在刘飞最初了解阿尔卡特研发、生产等情况的时候,他最高记录是一个月去法国六次,有时候就是去开一个会,晚上飞出去,早上到。开完会后,再回广东。在2005年,刘飞往返中法之间不下20次。另一个关于他最高记录是,他在一天之内在欧洲去了五个国家,分别拜访了不同的客户,“现在想起来都觉得苦”,他说。
而他的下属经理们,也几乎和他一样,将大量时间花在和法国人沟通、熟悉对方企业文化上。刚开始的时候,TCL的管理人员去阿尔卡特在上海的分公司,当时法国人并不热情,也没有留出办公室,倒不是因为有偏见,而是认为TCL不能成功,这些派驻的员工有可能很快就会被招回,因此没有必要留出地方。后来TCL的员工不得不主动沟通,讲明自己的思路,生活方式上也西化,“现在他们的信心都有了。
从本土市场出发
最近一段时间,通讯内部流传一个关于的故事:在宏碁国际化初步取得成功,欧洲市场占有率逐步上升的时候,有一次其在中国台湾市场的笔记本市场份额第一次被超过,宏碁的董事长王振堂怒不可遏,勒令下属马上采取行动,抢回份额,结果最终宏碁再一次确立了在台湾市场的地位。“这证明本土市场对国际化的中国公司多么重要,TCL也必须这样”。
但刘飞的心病是,目前在TCL通讯的全球市场结构中,海外市场依然占据了主角,其中拉美和欧洲市场占到了40%,亚洲市场占到了5%,而中国市场只有15%。在欧洲和拉美,TCL通讯一直沿用以往依靠电信运营商的采购商业模式。在中国市场,刘飞已经更换了三个总经理,但是依然还没有达到最佳状态,“我现在所有的压力都是在中国,这里才是立足地”,刘飞承认。在今年的1月,TCL通讯首次提出了“决战中国区”的总体战略,这是未来李东生和刘飞最为看重的市场。
这样的考虑有现实的意义。中国目前已经是全球最大的手机市场,也是几乎所有的跨国手机制造商主要的利润贡献地;而且从制造到研发、设计等方面,中国市场的条件都已经相对成熟,这意味TCL如果不在家乡市场恢复到2003年左右的“神勇”状态,那么未来很长一段时间,TCL都只能眼睁睁地看着跨国厂商在家门口攻城拔寨,而自己只能靠出口以及阿尔卡特品牌和运营商的捆绑销售来赚钱,这样下来,实际对TCL的品牌帮助不大外,作为在香港上市的内地公司,TCL通讯背靠中国市场,也能在资本运营层面获得更多的便利。这一点在TCL通讯通过数次融资输血赢得喘息机会可以看出。比如在TCL通讯最危险的时候,账面资金只有4000万,按照行业规律,这只够运营不到半年的时间。因此2005年底TCL集团带头认购了TCL通讯发行的2000万欧元可换股票据作为支持;2006年2月,TCL通讯也顺利完成融资5.88亿港元的计划;此后TCL通讯又发行了3亿新股用于融资,“这些保证了TCL通讯资金链没有断裂”,李东生说。
因此在TCL通讯接下来的计划中,主要部分都是围绕家乡市场展开。刘飞公布了一个“一三五计划”,希望用今年一年的时间,把TCL通讯做成国内最健康的手机公司,健康指标主要是指质量性数据,包括应收账款的周转,产品质量的直通率、返修率等;用三年的时间,使TCL通讯坐上国产手机第一的位置;用五年的时间,回到全球手机第一阵营。今年TCL在中国市场的销售任务是400万部。
在一三五计划中,颇为激进的一举是推行“28天保价”政策,这项政策意为28天内,TCL将负责市场手机价格下降所致的差价补偿,如果28天之外,经销商将自己承担跌价损失。一度这一旨在加速周转速度的举措遭到了经销商“TCL转移风险”的指责,但TCL降低了库存风险,避免重蹈2005年库存大量积聚的覆辙。
中国业务中心架构也随之调整,在总经理下设销售管理部、产品部,分别管理业务中心的人员调配和终端产品。再下是传统渠道部、大客户部、运营商部和市场及终端推广部四大部门,其中市场及终端推广部主要协助传统渠道部、大客户部和运营商部三大部门的市场推进,重塑TCL手机的终端形象。这一变动正是向目前跨国公司在华最为流行的做法靠拢。
而在TCL和阿尔卡特两个品牌的处理上,拥有十年阿尔卡特品牌免费使用权的TCL通讯计划阿尔卡特品牌主打欧美和南美市场,TCL自有品牌主打东南亚、俄罗斯等新兴市场;在国内市场,也会在适当时候重启阿尔卡特的高端品牌形象,而TCL则着眼年轻化,“要比和摩托罗拉看起来更有活力”,TCL通讯副总裁兼中国业务中心总经理向征对《环球企业家》说。
本文来源:环球企业家网站
责任编辑:王晓易_NE0011
用微信扫码二维码
分享至好友和朋友圈
加载更多新闻
热门产品:   
:        
:         
热门影院:
阅读下一篇
用微信扫描二维码
分享至好友和朋友圈Tcl/Tk 快速入门 - 为程序员服务
Tcl/Tk 快速入门
关于本教程
谁理应进修本教程?
本教程是针对那些具有一种或多种编程或剧本措辞阅历的人员设计的。可以在几种平台(包括 Win32 和 MacOS 和几个 *NIX 情形)下行使 Tcl/Tk,本教程是在运转安装了 GNU/Linux 的情形中编写的。
首先,我将引见 Tcl/Tk 并概述该措辞的一小段历史。然后,回想 Tcl/Tk 剧本措辞和正文器的症结功用,谈论该措辞的一些扩展年夜,并研讨几个外行使中的 Tcl/Tk 示例。在本教程中,随文本有一些代码段,偶而还无效果输出的图像(别忘了,Tk 是一种 GUI 对象箱)。
最初,我将集中一些内部成本(包括 Web 上的和印刷物)来匡助您更深切地意见 Tcl/Tk 情形。
Tcl/Tk 根蒂根抵常识
Tcl/Tk 的起源
Tcl 是“对象掌握措辞(Tool Control Language)”的缩写。Tk 是 Tcl“图形对象箱”的扩展年夜,它供应各类尺度的 GUI 接口项,以利于活络中止初级运用轨范垦荒。
John K. Ousterhout(见图像)于 1988 年最先垦荒 Tcl/Tk(读作“tickle tee-kay”),然后是加州除夜学伯克利分校(UCB)的一位教授连续对它中止垦荒。Tcl 是以可扩展年夜性、短的进修曲线和易于嵌入为特定目的而设计的。Tk 的垦荒始于 1989 年,第一个版本于 1991 年问世。Ousterhout 博士在他离开 UCB 之后连续垦荒 Tcl/Tk,然后因为责任需求,他连续为 Sun Microsystems 公司责任。现在,也就是在写本文之时,他在 (它垦荒出 Ajuba Solution,已由 Interwoven 收购)连续改良该措辞,今朝的波动版本是 8.3.2,在写本文的时辰,8.4 版本正在垦荒之中。
有关更多具体信息,请参阅“”页面。
对象和文件
在 Linux 零星上研讨 Tcl/Tk,需求有两个次要轨范。它们是 tclsh 和 wish。正如可以从其称号所辨其他那样,所之前者是 Tcl 外壳,经常运用于为外壳剧本供应实行情形。Wish 相反于 tclsh,它是针对窗口化的 GUI 情形。
输出以下敕令,搜检这些文件能否是存在:
~/tcltk$ which tclsh
/usr/bin/tclsh
~/tcltk$ which wish
/usr/bin/wish
which 敕令将前往指定可实行文件的途径。假定没有看到与这相反的效果,则需求转到 下载并构建您本人的副本。虽然,假定零星上不存在这些轨范,其实不泄漏表现有任何成就。不象 Perl,常日不会将 Tcl/Tk 视为是 Linux 操作的根抵要素。我所晓得的每一个刊行版都和某一版本的 Tcl/Tk 一路交付,最罕有的扩鸿文为 CD-ROM 或在线成本库的一部份。从这些成本,这些对象常日很随意疏忽安装。假定有难题,请与 GNU/Linux 软件的刊行商联络。
Tcl tick 的组成
不才面的清单中,将会发明第一个很罕有的示例轨范,它是用 Tcl 完成的。这是一个完整的剧本:第一行敕令挪用 tclsh 情形,第二行敕令实行理想责任。用您所选择的文本编纂器树立该剧本,输出 chmod +x hello.tcl 使之成为可实行文件,然后实行它以测试您这件“作品”。
~/tcltk$ cat hello.tcl
#!/usr/bin/tclsh
puts stdout {Hello, World!}
~/tcltk$ ./hello.tcl
Hello, World!
Tcl 和 Tk 是正文型的、可扩展年夜剧本措辞。与 BSD 准许证异常相反,该准许证准许在任何情形下自由行使该软件,只需在一切副本中留存该版权而且在任何分发中一字不差地传递告知书记。这个准许证条目使 Tcl/Tk 成为自由软件。
Tcl/Tk 是一种正文型情形。可以经由进程添加预编译的 C 函数来扩展年夜 Tcl 正文器,可从 Tcl 情形内部挪用 Tcl 正文器。可以为特定目的或通俗的和普遍行使的而定制这些扩展年夜。我们将在教程的后面看一些扩展年夜并着重看一下第一个扩展年夜 ― 异常盛行的 Expect。
在接上去的几屏中,将回想 Tcl 措辞的一些次要特色,从元字符和全局变量到运算符、数学函数和焦点敕令。究竟,这些敕令使 Tcl/Tk 成为有特色的,慢慢成长的措辞。请记住,在本教程中没有篇幅触及每条敕令。这里只凸起一部份,往后您可以更进一步意见 Tcl/Tk。
Tcl 元字符
#!/usr/bin/tclsh
# filename hello2.tcl
# This program code shows
# metacharacter usage
puts stdout "Hello, World! /a"
puts stdout {Hello, World! /a}
set Pints 6
set Days 7
puts stdout "The answer to the /
universe is [eval $Pints * $Days]!/n"
~/tcltk$ ./hello2.tcl
Hello, World!
Hello, World! /a
The answer to everything is 42!
元字符是在 Tcl/Tk 情形的高下文中有特殊寄义的字符或字符对,它们包括分组语句、封装字符串、终止语句和其它,以下表所示。右边列出的代码中演示了一些元字符。要留意的一个特殊特色是,当行使花括号(避免交流和扩展年夜)取代双引号时,输出中的差异。
; 或newline
语句分隔符
变量(判袂巨细写)
Name(j,k,l...)
带交流的引用
不带交流的引用
反斜杠交流
行连续(外行尾)
Tcl 全局变量和反斜杠交流
#!/usr/bin/tclsh
# Demonstrate global variables
# and backslash substitution
if {$argc &= 1} {
foreach Arg $argv {
puts stdout "$N: $Arg/n"
set N [expr $N + 1]
if {$Arg == "ring"} {
puts stdout "/a"
puts stdout "$argv0 on /
X Display $env(DISPLAY)/n"
~/tcltk$ ./hello3.tcl
./hello3.tcl on
X Display :0.0
~/tcltk$ ./hello3.tcl ring
当 Tcl/Tk 剧本最先运转时,存在几个全局变量(假定在当前情形中为非空,则是事后界说的)。这些变量准许以下对操作零星中止接见:argc 是对剧本自变量的计数,而不是对换用的称号中止计数。
argv 是自变量的列表(不是数组)。argv0 是挪用的文件名(可所以符号链接)。env 是凭证当前
外壳的情形变量名竖立下标的数组。errorCode 存储有关比来的 Tcl 缺陷信息,errorInfo 包括对这不合个缺陷事宜的客栈跟踪。
该列表还有其他 12 个 tcl_xxx 变量,从 tcl_interactive 到 tcl_version。可以在 Tcl/Tk in a Nutshell 中找到好的总结,(有关更多信息,请参阅本教程末尾的“参考资料”)。
在右边的样本代码中,行使了个中几个变量和(又一次)行使了一些反斜杠引用的字符(/n 和 /a)。
/char 准许交流非打印 ASCII 字符。这对 UNIX 下的许多剧本措辞和外壳情形都是罕有的。如表中声名的那样,对没有界说交流的反斜杠引用的字符只被庞杂地回送到输出。
/n 或 /newline
/space (“/ “)
/xddd…
十六进制值
Tcl 运算符和数学函数
~/tcltk$ cat maths.tcl
#!/usr/bin/tclsh
# Demonstrate operators and
# math functions
set PI [expr 2 * asin(1.0)]
if {$argc == 3} {
set X [lindex $argv 0]
set Y [lindex $argv 1]
set Rad [lindex $argv 2]
set Dist [expr sqrt(($X*$X)+($Y*$Y))]
set Cir [expr 2*$PI*$Rad]
set Area [expr $PI*$Rad*$Rad]
puts stdout "Distance = $Dist"
puts stdout "Circumference = $Cir"
puts stdout "Area = $Area"
puts stdout "Wrong argument count!"
puts stdout "Needs X, Y, and Radius"
~/tcltk$ ./maths.tcl 3 4 5
Distance = 5.0
Circumference = 31.
Area = 78.
Tcl 支持一组尺度的运算符和数学函数。这些运算符包括算术、位和逻辑运算符,可以经由进程 expr 敕令行使惯例的运算符优先顺序划定礼貌中止求值。其他,斟酌到 Tcl 的实质是面向字符串的剧本措辞,所以对一些数学函数中止了合理的弥补:
三角函数包括 cos(x)、acos(x)、cosh(x)、sin(x)、asin(x)、sinh(x)、tan(x)、atan(x)、atan2(y, x)、tanh(x) 和 hypot(x, y)。与这些函数相关的单元是弧度。
Log 函数是 exp(x)、log(x) 和 log10(x)。
算术函数是 ceil(x)、floor(x)、fmod(x, y)、pow(x, y)、abs(x)、int(x)、double(x) 和 round(x)。
rand() 和 srand(x) 是处置责罚随机数的函数。
右边这个示例行使了个中一些运算符和函数来竞赛争辩指定点到原点之间的距离,并前往给定半径的圆的周长和面积。其他,在这个示例中,行使列表下标(lindex)敕令来接见 $argv 的小我元素。
Tcl 中的轮回和分支
# parse command line switches
set Optimize 0
set Verbose 0
foreach Arg $argv {
switch -glob -- $Arg {
-o* {set Optimize 1}
-v* {set Verbose 1}
error "Unknown $Arg"
set LineCount 0
while {[gets stdin Line] &= 0} {
# to confuse Vanna White...
Remove_Vowels $Line /
$Optimize $Verbose
incr LineCount
return LineCount
Tcl 中的轮回敕令是 while、for 和 foreach。前提(转移)敕令是
if/then/else/elsif 和 switch。上述敕令的限制语句是 break、continue、return
和 error。最初,catch 敕令供应了缺陷处置责罚能力。
if/then/else/elsif 已在后面几屏中演示过。在正式语法中会用到 then,但常日会省略丢失落它。
在右边这个示例中,foreach 组织给 switch 敕令供应敕令行自变量。当处置责罚自变量时(留意:禁绝确的输出会终止剧本,因为还没有完成处置责罚缺陷的 catch),while 轮回经由进程为每行挪用进程并同时对行计数器加 1 来处置责罚输出。代码段停止时,前往处置责罚的行数。
Tcl 字符串和方法婚配
~/tcltk$ tclsh
% set Phrase "hello, world!"
hello, world!
% string toupper $Phrase
HELLO, WORLD!
% string totitle $Phrase
Hello, world!
% string match ello $Phrase
% string match *ello* $Phrase
% string length $Phrase
% append Phrase "Nice day, eh?"
hello, world!
Nice day, eh?
% string toupper $Phrase
HELLO, WORLD!
NICE DAY, EH?
% string wordend $Phrase 7
字符串是 Tcl 中的根抵数据类型。string 敕令理想上是一组敕令,这些敕令都是属于 string 的。外行使中,正如在右边的示例中所看到,string 读取的体式格式异常象来自 OOP 编程特定对象方法的运用轨范。
泄漏表现信息的 string 敕令是 length 和 bytelength(可以有所不合,这取决于字符集)。前往布尔值(1 或 0)的比拟是 compare、equal 和 match。这里的方法婚配是由“文件名交流”(庞杂类型的婚配常日与外壳操作相关)完成。还可以经由进程奇特的 regex 和 regsub 敕令来行使“初级正轨表达式”。
在 Tcl 中实行 index、last、first、wordend 和 wordstart 敕令可以完成下标功用。字符串改削是由 tolower、toupper、totitle、trim、trimleft、trimright、replace 和 map 来处置责罚的。后者需求事后界说一个字符映照表。用 range 抽取子字符串,用 repeat 多次输出字符串。
可以行使 append 敕令,将文本添加到现有变量中。经由进程行使与 C 措辞的 printf 敕令沟通的格式和约定,format 敕令可用来生成输出字符串。scan 对字符串中止解析并将值赋值给变量。最初,从 Tcl 8.0 最先,用 binary format 和 binary scan 敕令添加了将二进制数据作为字符串处置责罚的功用(是以可以处置责罚空字符,而不会丢失落败)。
~/tcltk$ tclsh
% set c1 {Bob Carol}
% set c2 [list Ted Alice]
% set Party1 [list $c1 $c2]
{Bob Carol} {Ted Alice}
% set Party2 [concat $c1 $c2]
Bob Carol Ted Alice
% linsert $Party1 1 Richard
{Bob Carol} Richard {Ted Alice}
列表在 Tcl 中有两个次要用途。我们已在经由进程 foreach
敕令(在 中找到)处置责罚敕令行自变量的情形中看到第一个用途。第二个用途是静态地构建 Tcl 敕令的元素,可以在本教程后面看到行使 eval 敕令来实行这类用途。
list 敕令收受接管它的一切自变量并将它们前往在一个列神色况中。自变量可所以值或变量。在右边这个示例中,可以手工树立列表,或可将其它列表视作自变量来行使列表(从而留存第一个“Party”的两对倾向)。或,concat 敕令用于将两个或多个列表兼并到顶级项的单个实体,前往第二个更幽默的“Party”。
其它一些有用的列表敕令及其语法是:
llength $List
― 前往顶级项的计数效果。
lindex $List n ― 前往已竖立下标的项,从 0 最先计数。
lrange $List i j ― 前往列表元素的局限。
lappend $List item… ― 将项附加到列表。
linsert $List n item… ― 在列表中的指定位置上拔出一项或多项,向下移列表中的其它项。
其他列表敕令还包括 lreplace、lsearch 和 lsort。split 敕令将字符串作为输出并生成经由准确解析的列表,而且在指定的字符处断开字符串。join 实行相反操作,收受接管列表元素并将它们串在一路,用 joinstring 分隔它们。
~/tcltk$ tclsh
set People(friend) Tom
set People(spouse) Marcia
% set People(boss) Jack
% array names People
friend boss spouse
% set Person $People(friend)
% array get People
friend Tom boss Jack spouse Marcia
% set People(friend) /
[concat $People(friend) Bob]
% set Person $People(friend)
理解 Tcl 数组的捷径是,将它们视作与 Perl 散列沟通的器械。Tcl 数组不是用数字竖立下标的线性数据组织,除非选择对数据强加那种正文。虽然带空格的字符串需求用引号括起或需求一个变量引用,但下标(或键)可所以任何字符串。
正如通俗的变量一样,行使 set 敕令初始化数组,如右边所示。圆括号内是给出的下标部份。请留意,圆括号不象花括号或双引号那样供应分组。一旦初始化为数组,就不能将变量作为单一变量来接见。如右边列表底部所示,数组元素也可所以列表。
更多 Tcl 数组
array 敕令是一种多用途对象,很象 string。array exists 敕令用于测试变量能否是作为数组存在,array get 用于将数组转换成列表花招,array set 用于将列表转换为数组,array names 用于前往下标列表,array size 用于前往对下标中止计数的效果。查找悉数数组有它本人的一组四个敕令:array startseach、array anymore、array nextelement 和 array donesearch。
虽然设计之初 Tcl 数组是一维的,但有一个模拟多维组织的好方法。因为下标是随意率性字符串,所以二维数组可以声明以下:
set i 1 ; set j 10
set array($i,$j) 3.14159
set array($i,$j) 2.71828
这些数组键理想上分离只是字符串“1,10”和“1,11”,但对接见数据来说,谁晓得这之间的差异?
#!/usr/bin/tclsh
# Demonstrate procedures and
# global scoping briefly
set PI [expr 2 * asin(1.0)]
proc circum {rad} {
return [expr 2.0 * $rad * $PI]
proc c_area {rad} {
return [expr $rad * $rad * $PI]
puts stdout "Area of circle of/
radius $rad is [c_area $rad],/n/
the circumference is/
[circum $rad]./n"
~/tcltk$ ./protest.tcl
Area of circle of radius 3 is 28.,
the circumference is 18..
proc 敕令界说 Tcl 进程。一旦界说后,就可以象内置的 Tcl 敕令那样挪用或行使它。其他,可以用缺省值界说这些参数;例如,将右边的界说更改成读取 proc c_area { {rad 1} } 。这将挪用没有参数的 c_area 进程,并前往单元圆的面积。
所行使的 rename 敕令正如它的字面寄义一样,为现有敕令或进程供应新称号。行使 rename 有两个显著的启事。第一个启事是,经由进程重命名原有进程,然后用沟通称号的进程交流它,来给现有敕令添加功用。进程可以挪用原进程,需求时可以添加一些需求的功用。行使 rename 的第二个启事是,映照一个不存在的敕令,例如,象 rename exec {}; 一样,可以避免用户实行内部敕令。
变量浸染域划定礼貌
浸染域划定礼貌描写了进程和变量名和值在轨范的不合条理上的可见性。例如,在剧本的最外层界说的变量是全局变量。缺省情形下,全局变量是弗偏见的,在进程内部也弗成用它们的值。这准许进程的编写者自由地界说变量名并赋值,而没需求忧郁笼盖对部门浸染域上未知的主要变量。要使全局变量在进程内部变得可见,必需将它声明为在进程内,就象在上一屏的示例中,对 PI 行使 global 敕令那样。
upvar 敕令供应将部门变量与其他一个浸染域中变量的值相联络关系的举动装备。这准许凭证称号将变量挪用进进程,这对当进程需求可以改削在其他一个浸染域的值而不单单行使它时,就显得异常随意。这个敕令语法是 upvar level $VarName LocalVar,个中 level 是到当前浸染域之外的步骤数。“#0”泄漏表现全局浸染域这一层。
Tcl 中的数据组织
#!/usr/bin/tclsh
# Demonstrate Data Structures
# using procedural wrappers
proc UserAdd { Acct rName eMail phone } {
global uData
if {[info exists uData($Acct,rname)]} {
set uData($Acct,rname) $rName
set uData($Acct,email) $eMail
set uData($Acct,phone) $phone
puts stdout [UserAdd bpb/
puts stdout [UserAdd tom/
puts stdout [UserAdd bpb/
~/tcltk$ ./datas.tcl
除庞杂的多维数组之外,常日建议用已专门用于进程接口的数组来完成 Tcl 数据组织。从组织的行使者角度来看,虽然这类设计潜藏了具体完成细节,但供应了实行主要的缺陷搜检能力。
右边这个示例中,在将 uData 声明为全局变量后,代码实行搜检,以检查帐户能否是已不存在。假定存在,则进程前往(非零)缺陷旧事。这个前往可以用于切换到生成缺陷文本输出。对本例,我们庞杂地供应三个连续输出,个中包括一次重复输出。这会发生发火如示例底部所示的输出,“1”泄漏表现因为一个重复的帐户称号而激起的一个缺陷前往,这是我们成心这样做的。
其它可以的数据组织包括数组列表、已链接或两重链接的数组或个中的各类陈设。因为 Tcl 8.0 所具有的列表重完成供应了不变的接见次数,所以数组列表组织相当有用。
途径和文件
~/tcltk$ tclsh
% file exists hello3.tcl
% file executable testit
% file pathtype ./hello3.tcl
% set dir1 home
% set dir2 brian
% set dir3 tcltk
% file join /$dir1 dir2 dir3
/home/dir2/dir3
% file delete testit~
文件和途径操作是跨平台情形中具有应战性的成就。对主机 OS,Tcl 行使 UNIX 途径名(缺省情形下,用‘/’字符分隔)和本机途径名组织。即便当轨范内的数据组织准确时,也很难确保用户输出与零星需求婚配。file join 敕令用于将 UNIX 花招转换成本机途径名。其它途径字符串敕令包括 file split、dirname、file extension、nativename、pathtype 和 tail。
在它饰演的“对象掌握措辞”脚色中,Tcl 有许许多多种内部文件测试和操作功用。每条敕令都以 file 最先,正如 file exists name 中一样。其它测试敕令(它们都前往布尔值)包括 executable、isdirectory、isfile、owned、readable 和 writable。
文件信息和操作(再提醒您一次,一切都是以 file 最先)是经由进程 atime、attributes、copy、delete、lstat、mkdir、mtime、readlink、rename、rootname、size、stat 和 type 来完成。请留意,在 Windows 或 Mac 情形中运转一些文件信息敕令时,可以会前往不决义的数据,因为例如在那些文件零星中没有泄漏表现索引节点和符号(和硬)链接数据。
行使 file … 敕令而弗成使经由进程 exec 的本机敕令的优点在于,前者会供应一个可移植接口。
悉数文档只庞杂地着重于 Tcl 措辞的这一部份。然则,在您“品尝”完右边这个 tclsh 示例中这些敕令的味道并对此感应知足之后,然后请连续阅读本教程收尾部陈设出的“参考资料”。
Tcl 进程和文件 I/O
~/tcltk$ tclsh
% nslookup orbdesigns.com
192.168.1.3
192.168.1.3#53
orbdesigns.com
Address: 64.81.69.163
% set d [date]
Sun Mar 25 13:51:59 PST 2001
% puts stdout $d
% set d [exec date]
Sun Mar 25 13:52:19 PST 2001
% puts stdout $d
Sun Mar 25 13:52:19 PST 2001
% if [catch {open foo r} Chan] {
puts stdout "Sorry, Dave.../n"
% gets $Chan
% gets $Chan
% eof $Chan
% close $Chan
exec 敕令用于显式地实行内部敕令。在 Linux 下,当 Tcl 处于交互体式格式时,可以直接运转除夜多半内部敕令,如右边示例所示。用 exec 运转时,会将轨范的 stdout 输出前往到 Tcl,而不是前往到屏幕,这准许将数据赋值给变量。当轨范在后台启动时,立刻前往的值是轨范的 PID。exec 轨范可以富余行使 UNIX 情形中的 I/O 重定向和管道。
其它进程敕令有 exit(终止正在运转的 Tcl 剧本)和 pid(前往当前或指定进程的 PID),对出于各类目的的情形,这异常便当。Tcl 不兼并任何本机进程掌握敕令,但可以将 exec 敕令与 PID 数据一路行使来完成许多责任。
文件操作行使以下敕令:open、close、gets、puts、read、tell、seek、eof 和 flush。如右边所示,在文件掀开敕令时期 catch 敕令对缺陷搜检是有用的。当在碰着新的一行字符之前需求打印轨范输出时,如在用户数据提醒符中,行使 flush 来写输出缓冲区。
其他一个功用(在受支持的情形中)是以掀开文件的体式格式掀开管道的能力。例如,用 set Channel [open "|sort foobar" r] 掀开管道通道后,第一个 gets 的输出将是“Eight”(文件数据“One”到“Ten”的输出在 10 个零丁的行上按字母递次陈设)。
将 eval 用于静态剧本
~/tcltk$ cat input01.txt
~/tcltk$ tclsh
% set InFile [open input01.txt r]
% while {[gets $InFile Op] &= 0} {
set Operation "expr $Op"
set Result [eval $Operation]
puts stdout "$Op = $Result/n"
在这个示例中,您可以感应 eval 敕令的丁壮夜功用。在正常情形下,Tcl 正文器以一遍体式格式(one-pass)操作:它首先对输出的敕令行(可以延迟在几个物理行上)中止解析,并实行任何交流。然后最先实行,除非找到不正常或无缺敕令。eval 准许第二遍体式格式(second pass)(也许更准确地讲,是预经由进程(pre-pass))。是以,可以先静态组织 Tcl 敕令,然落先行解析并实行它。
在右边的列表中,输出文件由三行组成,每行都显示了一种算术运算。挪用 tclsh 后,文件以只读体式格式掀开并与 $InFile 变量相联络关系。while 轮回每次将一行读入到 $Op 中。然后,经由进程事后设计将 expr 映照到 $Op 变量来组织悉数 Tcl 敕令。然后,扩展年夜,求值,从而分配效果。最初,在 stdout 上显示每步操作和效果。
虽然该样本演示了绝对琐细的 eval 运用轨范,但从概念上讲,可以凭证已知语法的输出文件的输出,很随意疏忽地将它扩展年夜为静态文件和/或目录处置责罚,或扩展年夜为对文件类型、准许权、接见时辰或任何品种的可测试元素的根抵操作。
Hello, World! Tk 格式
Tk 是对 Tcl 的图形对象箱扩展年夜。Tk 刊行版与 Tcl 的刊行版是在一路的。在接上去的几屏中,将回想 Tk 小部件集,研讨一些设置配备铺排选项并设置一些示例来演示 Tk 的有用性。
很难使任何 PHB(抉剔的老板)信任本教程的这一部份是与责任相关的。究竟,它是有关小部件的,概念上小部件与“顽耍……”更接近,但这是责任,所以让我们研讨它。首先,这里是 Tk 增强的“Hello, World!”代码
#!/usr/bin/wish
# Hello World, Tk-style
button .hello -text Hello /
-command {puts stdout /
"Hello, World!"}
button .goodbye -text Bye! /
-command {exit}
pack .hello -padx 60 -pady 5
pack .goodbye -padx 60 -pady 5
在第一行中挪用 wish(Tk 外壳)会发生发火缺省巨细的窗口小部件。然后,界说了两个按钮小部件 .hello 和 .goodbye ― 它们被放进窗口中,该窗口延伸至由指定按钮间距界说的巨细。实行该剧本时,在右边会显示一个对话框。单击 Hello 按钮,在父终端窗口中获得“Hello, World!”输出,单击 Bye! 以终止剧本。
在树立 Tk 小部件时,几近很少行使敕令。一半以上都是按钮或文本小部件的变体,以上面的列表所示。个中几项不才一屏中演示。
button ― 有二十多种设置配备铺排选项(从 anchor 和 font 到 padx 和 relief)的庞杂小部件。
画布是一种小部件,不只可以包括其它小部件,而且包括各类类型的组织化图形,包括圆、线和多边形。
checkbutton ― 树立复选框格式的按钮小部件,它链接到一个变量。
entry ― 构建单行文本输出框。
frame ― 框架是次要用作容器或定位架的小部件。
label ― 树立标签对象。
listbox ― 树立文本字符串列表框。在界说小部件之后,添加各项。
menu ― 单个多面小部件,包括多种菜单格式的各类项。
menubutton ― 为下拉菜单完成供应可单击的顶级界面。
message ― 树立包括版本调解和字自动换行特色的文本显示窗口小部件。
radiobutton ― 树立单选按钮,它可所以与指定变量相关的一个鸠合之一。
scale ― 为在指定局限和分辩率内选择值而树立滑动块。
scrollbar ― 为在相关小部件中更改部份内容(常日是文本或图)而生成小部件。
text ― 树立显示一个或多个文本行并准许编纂该文本的小部件。
toplevel ― 树立新的顶级(在 X 桌面上)窗口。
Tk 小部件的分类取样器
象一些庞杂的 Tk 代码一样,上面这个清单中的代码生成右边的图像。在图像的文本窗口中显示了经由进程 OK 按钮挪用的进程代码和样本输出。
~/tcltk$ wish
. configure -width 200 -height 400
% label .header -text "Tk Tutorial Example"
% place .header -x 5 -y 2
% scale .slider -from 1 -to 100 -orient horiz
% .slider configure -variable SlidVal
% place .slider -x 5 -y 20
% entry .slidbox -width 5 -textvariable SlidVal
% place .slidbox -x 120 -y 38
% radiobutton .one -text "Don't Worry" -variable Mood -value 1
% radiobutton .two -text "Be Happy" -variable Mood -value 2
% place .one -x 5 -y 70
% place .two -x 5 -y 90
% text .twindow -width 22 -height 14 -font {clean -14}
% place .twindow -x 5 -y 120
% button .ok -command {process_data $SlidVal} -text "OK"
% button .cancel -command {exit} -text "Cancel" -background red
% place .ok -x 15 -y 350
% place .cancel -x 120 -y 350
Tk 敕令,第一部份
有二十多条 Tk 敕令用于对 Tk 小部件集的行使、增强或弥补。它们包括 bell,响铃,这取决于对正在运转的 X Window 零星的设置配备铺排。bind 树立 Tcl 剧本和 X 事宜之间的联络关系;例如,指定的键盘/鼠标组合操作。clipboard 是其他一种多功用 Tk 敕令 ― 它包括用于祛除内容、装入内容和将内容粘贴到 Tk 剪贴板和从 Tk 剪贴板粘贴内容(这不合于正外行使的 X 或窗口治理器本人所具有的任何剪贴板功用)。
destroy 用于删除窗口及其一切子窗口。在‘.’(根)窗口中行使时,它删除悉数运用轨范。event 是一种功用丁壮夜的对象,用于生成虚拟窗口事宜并将这些事宜拔出正在处置责罚的队列中,就好象理想事宜(例如,用鼠标单击按钮)已真的发生发火一样。font 敕令用于树立指定的零星字体实例。它准许零星字体的外埠(对剧本而言)命名、已命名字体的属性改削和字体的“删除”。在 wish 提醒符下输出 font families,可以获得可用字体的列表。
焦点是窗口治理舞台中的一个主要概念 ― 在任何给定的显示中,每次只能有一个窗口“留意”键盘和鼠标。Tk focus 敕令用于将剧本掌握交给显示焦点,并将它发送到指定窗口。弥补函数 grab 准许 Tk 独有对某处的显示焦点,在该处,在窗口情形中申报位于窗口之外发生发火的事宜。当要在任何其它零星运动发生发火之前强制完成某一选项时,这是有用的。
Tk 敕令,第二部份
连续概述 Tk 敕令,下一个是 grid,掌握 Tk 窗口几何性质的接口。它用于在窗口中以行和列的花招放置小部件。
lower(和弥补敕令 raise)处置子窗口的可见性。上层(lowered)窗口不会隐瞒与其堆叠的兄弟窗口;上层(raised)窗口被带到最上层。在显示多个文档景遇下会经常行使。许多 Tk 小部件和敕令都行使一组公共的尺度选项。可以行使 option 敕令来检查或添加它们。
对将小部件和子窗口放入窗口中,有两条敕令:pack 和 place,它们都已演示过。其最庞杂的行使,pack 将一个或多个小部件添加到窗口,并将这些对象周围的窗口削减至我们在本节最先部份的 Tk Hello 示例中所看到的那样,除非尚有指明。place 行使绝对或绝对尺寸来设置和显示父窗口中的对象,例如,从右边最先的 5 个像素,或窗口下一半(0.5)。
其它敕令包括 selection,X 对象选择对象集的接口;tk,它供应对 Tk 正文器内部形态的所选择部份的接见;winfo 敕令,用于检索有关 Tk 治理的窗口的数据;wm,正在运转窗口治理器的界面,用于设置从题目栏文本到一切类型的几何尺度和约束的多个功用。
真的(小)Tk 运用轨范
我需求天天运转的 LAN 转换剧本的接口。所以为随意行使,让我们行使 Tcl/Tk 来构建一个小对象。我进展它可以凭证主目录中的 ASCII 设置配备铺排文件供应一些选择。该文件包括下表中所示的数据:
# ~/.netsetrc
# 03.26.2001 bilbrey
# space between name and command
Home /usr/local/bin/nethome
Office /usr/local/bin/netoffice
Admin /usr/local/bin/netadmin
运用轨范(不才一屏显示完整代码清单和图像)读取设置配备铺排文件并对按钮名及其相关操作的每一个非空白、非正文行中止解析。虽然经由进程界说三个按钮来运转显式轨范,会使编写剧本变得加倍随意疏忽,但这类更通俗的处置计划准许我只需把单一行添加到 ~/.netsetrc 中,即可添加我想要的任何功用。
该代码的瑕玷是,它不允许设置配备铺排文件花招有严重缺陷。在按钮按下时,它希冀是这样的花招:单字按钮名,接着是一个空格,接着是实行的敕令(假定有需求,可以有自变量)。不外,从理论上讲,与无组织的用户输出比照,设置配备铺排文件更随意疏忽贯串衔接在一行上。
样本 Tk 运用轨范
样本 Tk 运用轨范对话框
#!/usr/bin/wish
# netset.tcl
# 03.26.2001 bilbrey
set ConFile "~/.netsetrc"
if [catch {open $ConFile r} Conf] {
puts stderr "Open $ConFile failed"
# parse config, define buttons
set Bcount 0
while {[gets $Conf Cline] &= 0} {
if {1 == [string match #* $Cline]} continue
if {[string length $Cline] & 4} continue
set Nend [string wordend $Cline 0]
incr Nend -1
set Bname [string range $Cline 0 $Nend]
set Cbeg [expr $Nend + 2]
set Bcomd "exec "
append Bcomd [string range $Cline $Cbeg end]
incr Bcount
set NextBut "button$Bcount"
button .$NextBut -text $Bname -command $Bcomd
if {$Bcount == 1} {
puts stderr "No buttons defined"
# display buttons
while {$Bcount &= 1} {
set NextBut "button$Bcount"
pack .$NextBut -padx 10 -pady 10
incr Bcount -1
button .exit -text Exit -command {exit}
pack .exit -padx 10 -pady 10
最先熟习 Expect
Expect 是什么?
Expect 是 Tcl 和 Tk 措辞的扩展年夜。Expect 为使交互式轨范的剧本编制自动化,供应了庞杂而功用丁壮夜的接口。其他,Expect 使交互式运用轨范嵌入 GUI 变得随意疏忽。Expect 的垦荒与 Tcl/Tk 的泛起是同时发生发火的,两者今朝的版本都是 5.32。
Expect 的作者是 Don Libes,他在美国国家尺度与手艺学会(NIST)责任。驻留在 NIST 干事器上。(然则,Expect 和任何相关的商业或非商业产物显著都未经 NIST 认可。)不才面几屏中,将研讨从源代码示例目录中精选出来的一些 Expect 剧本示例,并简要概述它的敕令语法。
为什么要进修 Expect?引用 Don 论文中的一句话,“行使 expect,使零星治理责任自动化”(USENIX LISA 会议 1990 年 10 月)“……效果是 UNIX 零星治理员的对象箱里充满着曾见到过的一些最差的用户界面。只需完整从新设计才华匡助处置一切这些成就,expect 可用来处置责罚许多这些成就。”
行使 Expect 的 RFC 检索
#!/usr/local/bin/expect --
# ftp-rfc &rfc-number&
# ftp-rfc -index
# retrieves an rfc (or the index) from uunet
exp_version -exit 5.0
if {$argc!=1} {
send_user "usage: ftp-rfc /[#] /[-index]/n"
set file "rfc$argv.Z"
set timeout 60
spawn ftp ftp.uu.net
expect "Name*:"
send "anonymous/r"
expect "Password:"
expect "ftp&"
send "binary/r"
expect "ftp&"
send "cd inet/rfc/r"
expect "550*ftp&" exit "250*ftp&"
send "get $file/r"
expect "550*ftp&" exit "200*226*ftp&"
send_user "/nuncompressing file - wait.../n"
exec uncompress $file
在引见 Expect 之前,请先研讨右边的示例。它只是对在尺度 Expect 源代码分发版的示例目录中的版本略加改削而获得的,一切示例都在这个目录下。让我们看一下代码……
这个轨范使 UUNet 档案文件中 IETF RFC(Request for Comment)文档的 FTP 检索自动化。剧本的第一行挪用 Expect 外壳。留意,我已给出了可实行文件的完整途径名。这是最平安的,因为很难晓得任何给定用户的途径情形。该剧本先搜检 Expect 版本,然后打印用法旧事,除非给出准确的自变量数目。
接上去,设置 timeout 值,不才一行发生发火的 FTP 会话没法准确衔接时,避免 Expect 剧本锁住零星成本。剧本的其他部份除夜多半是几组 expect/send 敕令对。每一个 expect 敕令守候来自觉作轨范(在本例中是 ftp)的指定输出,后 send 准确呼应。留意,在 cd 和 get 指令之后有两个 ftp 缺陷代码的圈套。对每种情形,缺陷代码 550 与第一个前提婚配,假定为真,则剧本存在。否则,实行 250 代码(泄漏表现胜利),expect 进入下一条敕令。
领受文档之后,剧本向 ftp 会话发出 close 敕令。wait 敕令挂起剧本处置责罚,直到 ftp 终止为止。最初,剧本将给用户发送一个旧事,对已下载的 RFC(或 rfc 下标)中止解压,然后隐式加入(缺省情形下)。
Expect 的症结,第 1 部份
#!../expect -f
# wrapper to make passwd(1) be non-interactive
# username is passed as 1st arg, passwd as 2nd
set password [lindex $argv 1]
spawn passwd [lindex $argv 0]
expect "password:"
send "$password/r"
expect "password:"
send "$password/r"
expect eof
Expect(作为措辞,‘E’除夜写)有四个症结敕令。第一个是 expect(敕令,小写‘e’),假定找到婚配,它查找方法并实行敕令。对每条 expect 敕令,可以有几个组,每一个组都是由选项符号、与之婚配的方法和要实行的敕令或敕令主体组成。缺省情形下,expect“侦听”SDTOUT 和 STDERR,直到找到婚配或 timeout 期满为止。
缺省情形下,行使 Tcl 的字符串婚配举动装备来婚配方法,它完成文件名交流,相反于 C 外壳方法婚配。-re 符号挪用 regexp 婚配,-ex 注解必需是准确婚配,不带通配符或变量扩展年夜。expect 的其它可选符号包括 -i 和 -nocase,前者泄漏表现要监控发生发火的进程,后者强制在婚配之前将进程输出酿成小写。对完整的声名,在敕令提醒符下输出 man expect,以检查 Expect 的零星手册页面文档。
第二个主要敕令是 send,它用于为由 Expect 剧本正在监控的进程生成输出。send 兼并选项以发送给指定的发生发火的进程(-i),缓慢地发送(-s,例如,在串行通讯中,为了不使缓冲区溢出)和其它几个选项。
Expect 的症结,第 2 部份
#!/usr/local/bin/expect
# Script to enforce a 10 minute break
# every half hour from typing -
# Written for someone (Uwe Hollerbach)
# with Carpal Tunnel Syndrome.
# If you type for more than 20 minutes
# straight, the script rings the bell
# after every character until you take
# a 10 minute break.
# Author: Don Libes, NIST
# Date: Feb 26, '95
spawn $env(SHELL)
# set start and stop times
set start [clock seconds]
set stop [clock seconds]
# typing and break, in seconds
set typing 1200
set notyping 600
interact -nobuffer -re . {
set now [clock seconds]
if {$now-$stop & $notyping} {
set start [clock seconds]
} elseif {$now-$start & $typing} {
send_user "/007"
set stop [clock seconds]
右边是称为 carpal 的剧本,它也是来自源代码 Expect 分发版的其他一个示例。
spawn 是用于树立新进程的 Expect 敕令。它已泛起在我们行使过的每一个示例中。在右边,它把途径拖到缺省外壳可实行文件并发生发火新实例。在这样做时,spawn 前往一个进程标识(在变量 spawn_id 中设置)。这可以在剧本中留存并设置,这给予了 expect 进程掌握能力。
interact 是 Expect 用来掀开用户与发生发火进程之间通讯的敕令。-nobuffer 符号将与方法婚配的字符直接发送给用户。-re 告知 interact 将接上去的方法用作尺度正轨表达式,‘.’是与输出时每一个字符婚配的方法。在交互体式格式中,缺省情形下,Expect 的 STDOUT 和 STDERR 流的重定向也前往给用户。
行使 Expect 可以完成哪些责任?
当剧本挪用交互式轨范时,缺省情形下,Expect 隔绝一切输出和输出(STDIN、STDOUT 和 STDERR)。这准许 Expect 查找与轨范输出婚配的方法,并将输动身送到发生发火的进程,以模拟用户交互。其他,Expect 可以将进程的掌握传递给用户(假定这样指点的话),或凭证要求掌握。
这些特色不只使 Expect 对公共治理责任变得异常有用,而且证实了 Expect 无益于构建测试剧本,以在轨范垦荒时期实行 I/O 验证。
最初,有一个极为有用的轨范 autoexpect。它本人是一个 Expect 剧本,autoexpect 监控敕令行交互式轨范,生成准确复制该交互的 Expect 剧本。现在,虽然常日不需求它,但很随意疏忽拿几个 autoexpect 会话的效果,归结综合 expect 方法,然后将它们剪贴到希冀的设置配备铺排中。已在多处提到过,进修 Expect 的最佳对象是运转 autoexpect 并行使这些效果。
Tcl/Tk 扩展年夜
Tcl/Tk 扩展年夜引见
Expect 仅仅是诸多 Tcl/Tk 扩展年夜中的一个前驱者。几个是惯例适用轨范,而多半都是特定软件或运用轨范。因为 Scriptics 仍然是一切 Tcl/Tk 的地方成本库,所以,对进一步索求 Tcl/Tk,该站点上的 是有价值的成本。
不才面几屏中,我们将简要地看一下几个次要扩展年夜,意见它们的显著特色和吸惹人的地方。
[incr Tcl]、[incr Tk] 和更多…
于 1993 提出的 [incr Tcl](读作 inker tickle)为 Tcl/Tk 供应面向对象的功用。[incr Tcl] 供应对象、类和称号空间等特色。这些特色使得带数据封装、组合和连续的 Tcl 来构建除夜项目变得加倍随意疏忽。以下做到这一点:classname、objname 和 delete,都是对象敕令。用 body、class 和 configbody 敕令树立和编纂类。其它各类敕令有 code、ensemble、find、local 和 scope。
图形化的 [incr Tcl] 是 [incr Tk]。该对象扩展年夜为 GUI,它供应了可伸缩性和数据潜藏的庞杂纯洁性所需的沟通 OO 功用,使得瓜分除夜的编程功课更随意疏忽。[incr Tk] 供应了一些新的基类:itk::Archetype、itk::Widget 和 itk::Toplevel。这些类与一组完整的方法互相弥补。
构建于 [incr Tk] 根蒂根抵上,是号称 Mega-Widget 集的 [incr Widgets]。该对象准许异常随意疏忽地界说和显示庞杂对象,好比文件选择框。借用 [incr Widgets] Web 页面,只是行使上面的敕令就树立了右边的图像:fileselectiondialog . .fsd activate.
的链接很随意疏忽地找到这些各类各样的扩展年夜。
BLT 和 Tix
为了对这一对特殊的 GUI 和图形 Tcl/Tk 扩展年夜一样的不屈正(对它们都不屈正处置责罚),先向您引见 BLT()。BLT 是一种 Tk 扩展年夜,它供应了一些功用以便随意地树立多元素小部件,这对庞杂的 Tk 极具应战性。BLT 敕令包括 table、graph、barchart、vector、spline、busy、bgexec、drag&drop、htext、bitmap、winop、watch 和 bltdebug。
接上去是 Tix,它泄漏表现 Tk Interface eXtension。Tix 的当前版本是4.0,它供应了 43 个敕令,个中除夜多半敕令要末是 Mega-widget 要末是用于构建 Mega-widget 的一些组件,还有一些适用轨范。Tix 的 Web 站点
声称“有了 Tix,可以遗忘 TK 小部件的琐碎细节并心神专注于处置您手边的成就。”当用这些敕令(如 tixDirList、tixFileSelectDialog、tixPopupMenu、tixScrolledWindow 等等)活络地树立适用的界面时,您会很随意疏忽看到这项声称的根蒂根抵。
扩展年夜的 Tcl,TclX 理想上不单单是其他一种“扩展年夜”。用作者的话来说,“扩展年夜的 Tcl 面向零星编程责任和除夜的运用轨范垦荒。TclX 为本机操作零星供应了附加接口和许多新的编程组织、文本操作对象和调试能力。”可在
上找到 TclX 的在线主页。
在以前几年中,许多 TclX 的原始特色已使它成为焦点的 Tcl 宣布。然则,TclX 小组很有见识,将静态装入库和包、汇集编程支持和供应敕令接见的进程等这些特色添加到常日称作的 expr 数学函数和更多函数中。
除夜多半尺度 Linux 分发版都带 TclX,它作为一个包,可以在安装 Linux 时,选择性地安装它。或,可以从源代码编译它,与 Tcl 和 Tk 衔接在一路。比来 TclX 版本的异常好的特色之一是名为 tclhelp 的轨范,它是 Tcl 和 Tk 匡助阅读器,可以很随意地中止参照。剧烈向您举荐。
接见扩展年夜商场
不出料想的话,对这些盛行的编程情形,除我在本教程中所详实谈论的一些之外,还有许多扩展年夜。可以到 Scriptics 的 ,进修更多有关上面这张表中 Tcl 和 Tk 扩展年夜所具有的一些能力:
准许接见从 dBase 文件到衔接和查询对象箱中的一切器械。还可以找到许多其它与数据库相关的对象和适用轨范。
添加了电子邮件、FTP、汇集监控、散布式处置责罚和 Palm 衔接适用轨范等功用。
包括 [incr Tcl] 和几个其它 OO Tcl 完成。这些包括 OTcl(MIT Object Tcl)、XOTcl、TOS、Tea(Java 格式的 Tcl OO)、stooop(Simple Tcl-Only Object Oriented Programming)和其它。
与我们看到过的 [incr Widgets]、BLT 和其它 Mega-widget 库一路,供应除夜量附加的 GUI 功用,从图像和视频处置责罚小部件到笔记本和文档界面扩展年夜。在为本人设计某些器械之前,一定要搜检这个地方。
类别完整是一个各类扩展年夜的鸠合,每一小我都可以从中意见一些器械。从完成神经汇集(LANE)的 alpha 对象箱,到数据转换、旧事整理和密码包(Trf 和 TrfCrypto),到音频播放和录制能力(Snack)。
其他,还有专门针对
完成的 Tcl/Tk 扩展年夜。假定您在这两个情形中的随意率性一个责任,则最好去接见一下。
参考资料与反应
汇集的参考资料
正式的 Tcl/Tk 徽标
这里是集中了许多 Tcl/Tk 成本的列表,以便于参考。首先,在本教程中的一切 Web 链接都在这两个站点:,Tcl/Tk 垦荒的除夜本营和
(“这里 .com 是指社区”)之一(从这些站点链接出去或只需一次或两次跳转),它们通往许多最盛行的 Tcl/Tk 扩展年夜。
为了弥补那些静态源码,有许多关于 Tcl/Tk 及其扩展年夜的好书。我只能举荐我曾阅读和行使过的一些书本;您可以从您所喜好的实地书商或在线书商获得这些书来阅读它们,从中可以找就职何 20 多个关于 Tcl/Tk 的书名。
Tcl and the Tk Toolkit,John K. Ousterhout 著(Addison Wesley:1994,ISBN X)。虽然这本书已出书很久,但它仍然是对 Tcl/Tk 编程的格式和理论的超卓引见。
Practical Programming in Tcl and Tk, Third EditionBrent B. Welch 著(Prentice Hall:1994,ISBN )。这本书有异常多的、综合的、周全了了正文的示例,我发明它一贯很有用。
TCL/Tk Tools,Mark Harrison, et al. 著(O’Reilly and Associates:1997,ISBN )。对后面列出两本书的主要弥补,Tools 是多位作者的造诣,它有用地涵盖了许多受迎接的 Tcl/Tk 扩展年夜,其具体水平如斯之细,使得它为一些包行使其来作为 Web 和匡助页面成本供应了绝对的便当。
最初,Tcl/Tk in a Nutshell,由 Paul Raines 和 Jeff Tranter 合著(O’Reilly and Associates:1999,ISBN )。包括一切敕令、符号和选项,更多是针对 Tcl 和 Tk 焦点敕令、Tcl/Tk C 接口、Expect 和几个其它次要扩展年夜。当没有若干时辰时,这是一本人旁可匡助处置成就的有用的书。
我们守候着您对本教程的反应定见和对未来的成长倾向,供应有关一贯在成长中的 Linux 剧本措辞的最新信息。其他,迎接经由进程
与作者直接联络。
原文地址:, 感谢原作者分享。
您可能感兴趣的代码

我要回帖

更多关于 出现幻听是怎么回事 的文章

 

随机推荐