Tkexampl tcltk的一个经典例子
- 格式:pdf
- 大小:819.50 KB
- 文档页数:18
Tkinter教程3——⼀个例⼦(真实的)程序不管常规⽅法如何,我们先尝试⼀个轻巧并且很实⽤的⼩例⼦。
它会让你体会到在Tk程序背后看起来的最初感觉。
设计我们要是⽤的例⼦是⼀个简单的GUI⼯具,⽤来将⼀个单位为英尺的数字转换为与其相等的⽶制单位数字。
如果我们将其简单的描绘出来,应该看起来如下:看起来我们需要⼀个短⼩的⽂本输⼊部件,可以让我们输⼊⼀个英尺单位的数字,同时还有⼀个‘Calculate’按钮,⽤它获取输⼊的英尺数字,执⾏计算,然后把计算后的⽶制数字结果放在位于输⼊⽂本框下⾯的位置。
当然,我们还需要三个静态的标签(”Feet “,“is equivalentto”和"Meters")帮助我们指出如何使⽤界⾯。
下⾯是创建该程序的Python代码:from tkinter import *from tkinter import ttkdef calculate(*args):try:value = float(feet.get())meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0)except ValueError:passroot = Tk()root.title("Feet to Meters")mainframe = ttk.Frame(root, padding="3 3 12 12")mainframe.grid(column=0, row=0, sticky=(N, W, E, S))mainframe.columnconfigure(0, weight=1)mainframe.rowconfigure(0, weight=1)feet = StringVar()meters = StringVar()feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet)feet_entry.grid(column=2, row=1, sticky=(W, E))bel(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3, sticky=W) bel(mainframe, text="feet").grid(column=3, row=1, sticky=W)bel(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)bel(mainframe, text="meters").grid(column=3, row=2, sticky=W)for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)feet_entry.focus()root.bind('<Return>', calculate)root.mainloop()最终的⽤户界⾯:代码风格上的提⽰:每⼀种语⾔,包括这部教程⾥的,都有多种可供选择编写风格与习惯约定,帮助我们决定如何使⽤变量和函数命名,过程、函数化或⾯向对象风格等等。
好看的tkinter例子-概述说明以及解释1.引言文章1.1 概述部分内容:引言部分将对本文的内容进行概述。
本文主要介绍了一些使用tkinter 编写的好看的例子,以展示tkinter在用户界面设计中的魅力和灵活性。
在本文中,我们将首先简要介绍tkinter的背景和基本概念,然后列举两个具有吸引力的tkinter例子,通过这些例子展示了tkinter的各种功能和特点。
通过本文的阅读,读者将能够对tkinter有一个较为全面的了解并学习到一些好看的例子的编写方法。
同时,本文还将对这些例子的实现原理进行解析,以便读者能够更好地理解和应用这些例子。
在接下来的正文部分,我们将详细介绍tkinter的基本知识和使用方法,包括窗口的创建、控件的布局和事件的处理等。
然后,我们将展示两个好看的tkinter例子,分别是例子1和例子2。
这些例子将涵盖多种功能和效果,例如按钮、标签、输入框、绘图等,通过运行这些例子,读者将能够亲身体验到tkinter的强大和灵活性。
最后,在结论部分,我们将对本文进行总结,并展望tkinter的未来发展。
我们希望通过本文的介绍,读者可以对tkinter有更深入的认识,并能够在自己的项目中灵活运用tkinter来设计出更好看、更具吸引力的用户界面。
总之,本文将通过介绍好看的tkinter例子,帮助读者全面了解和掌握tkinter的使用技巧,并激发读者在用户界面设计中的创造力和想象力。
无论是初学者还是有一定经验的开发者,都可以从本文中获益,提升自己在tkinter编程方面的能力。
1.2文章结构文章结构部分的内容:1.2 文章结构本文分为三个主要部分:引言、正文和结论。
引言部分介绍了本文的概述、文章结构以及目的。
在概述中,将对tkinter进行简要介绍,说明其作用和特点。
接下来,将详细阐述文章的结构和各个部分的内容安排,以帮助读者理解整篇文章的组织结构。
最后,明确本文撰写的目的,即展示一些好看的tkinter例子。
TCL-TK实现modelsim仿真多用例顺序执行背景:随着逻辑的复杂程度的增加,逻辑的设计越来越复杂,逻辑得规模也越来越大。
在进行一个设计时候,需要多个仿真用例来对设计进行功能、异常的验证。
如果从传统的单个执行用例一个一个执行往往需要很费时间。
本文阐述的是,如何用TCL/TK实现可视化的,基于mentor公司的modelsim的仿真用例串行执行。
也就是,一次性将所有用例执行完毕,并生成测试报告。
TCL/TK编写的程序可以通过细微的改动移植到LINUX环境下。
本文的代码部分实现的是可以兼容两种系统的仿真用例串行执行程序。
本文所涉及的的工具为xilinx公司ise9.2.04,modelsim6.0d,tcl8.5。
1.设计工程准备对于一个设计工程,我们会建立相应的目录。
目录结构如下图:图1.1 工程结构图下面分别介绍各个目录的作用。
bfm文件夹存放仿真需要用的仿真接口模型,用于进行激励的输入。
lib文件夹存放仿真的库文件。
利用modlsim将xilinx库提供的器件库文件vlog。
编译后的文件放到lib/work文件夹下。
rtl文件夹存放设计的源代码,lib用于存放编译设计后的库文件。
sim文件夹用于存放设计文件代码所编译后的仿真文件。
tests文件夹下存放的是仿真用例。
在每个用例文件夹下存放着start.tcl文件,用于进行该用例的执行。
内容如下:exec vsimk –do “vmap work ../sim/work; vlog ../rtl/*.v;vlog ../bfm/*.v; vsim ../lib/work/ work.tb_design; do wave.do;p_run 5ms; quit -f”通过tcl解释器加载该文件,该用例可以自动运行,且自动退出modlsim。
如果该设计的用例数较多,务必导致,工作效率的降低。
通过tcl/tk编写的串行脚本用例,可以方便的将所有的用例串行执行完毕。
Tcl 语言讲义稿1.Tcl/Tk简介Tcl/Tk=Tcl + Tk Tcl=Tool command language Tk=tookit 创建图形用户界面的工具包一般用Tk开发图形界面(如按钮,对话框),用Tcl完成编程功能,如处理用户的输入。
1.1特点可扩展性和可整合性(glue together),具有大量的工具包来扩展其功能。
跨平台性(script everywhere run everywhere)类似于java。
1.2 语法1.格式命令的写法格式:command arg1 arg2 arg3…Tcl/Tk命令之间以换行或分号分隔:Set a 45Set b 55或写成:set a 45;set b 55在同一个命令里,字与字之间以空白或Tab分开:2. 注释每一行的第一个非空白的字符如果是“#”,则之后的内容会被忽略,视为注释,例如:#This is a comment.Set a 45但有一种情况需特别注意:#This is a commentset a 45 #This is NOT a comment第二行“#”之后的内容并不会被视为注解,如果要采用这种写法,必须是在命令结束之后,之前提过命令的结束由换新行与结尾分号两种,因此这一行要改成:set a 45;#This is a comment3. 替代⑴变量替代variable substitution在变量名字的前面加上“$”符号表示在使用这个变量时,将变量名字代换成变量的值,例如:set pi 3.14159expr $pi*25*25第一行在给定一个叫做pi变量的初值,第二行要使用这个变量,为了能将变量名称替换成变量的值,所以在变量前加上“$”符号。
给定变量初值是不必加上“$”符号,使用变量时才加上“$”符号,表示代换成变量的值。
Varisble substitution还有另外一个形式,例如Set length 50cm如果想以变量取代50的部分,下面这段写法是错误的:set len 50;set length $lencm因为Tcl会把$lencm当成一个变量,所以应该改成;set len 50;set length ${len}cm 变量的部分以{}围住⑵命令替代command substitutionset grams [expr $kg*1000]上面的命令将grams指定成“expr $kg*1000”的命令,因为替换的是合法完整的Tcl命令,所以叫做command substitution,命令必须合法的Tcl命令,并且以一对中括号“[]”围住。
一种高效的可扩展的GUI开发工具—T cl/Tk第27誊第4期西南民族学院学报?自然科学版journalofS’outhwestUniversityforNationalities.NaturalScienceEdition文章编号i0tl3.2843c2001】04—0402-04一种高效的可扩展的GUI开发工具——Tcl/Tk刘莉.马丽,伍珂l西南艮袭学院计算机科学与技丰学院,成都51004112中国联通四)¨分公司,成都610036, 摘要:Tcl/Tk是一种简明,高效,可移植性好的具有C/C++应用编程接口的编程语言.本文介绍其特点,优势和结构,并详细描述了如何用C语言创建新的Tc】/rrk命令关键词:tcL/tk;图形用户界面(GUI);解释器中图分类号:TP311.1文献标识码:A1Tcl/『k的特点本文讨论两个称为Tcl和Tk的包,它们提供了一个开发和利用图形用户界面(GU1)的应用程序编程系统Tel代表”toolcommand[anguage”,读为”tickle”,是一个用于控制和扩展程序的简单的脚本语言,它提供一般的对各种应用程序有用的编程环境,比如:变量,循环,子程序等而且,Td是可嵌人的:它的解释程序是作为一个c子程序库来实现的,可以很容易地和应用程序组合成一体,并且每个应用程序都可以通过扩展其所特有的的命令来扩展1’cl核心.Tcl一个撮有用的扩展是Tk,它是xWindow系统的工具包,读为”tee-key”Tk通过增加建立用户接口命令来扩展Tc[核心,使用户可以通过写Tcl脚本而不用写c代码来创建motif用户接口.与Td相同,Tk也是作为一个c子程序库来实现的,所以它也可以用于各种不同的应用程序中各个应用程序也可以用c 编写的Tk的用户接Vl构件(widgets)和geometrymanagers来扩展Tk基础特征Tel/Tk为应用程序开发者和用户提供了四个方面的好处:第一.Tcl为应用程序提供了一功能强大的脚本语言,应用程序所需要做的就是实现一些新的提供应用程序基本特征的Tel命令,然后把这些程序同Td解释程序相链接以提供一个全功能脚本语言,它既包含了Tel所提供的命令(称为Telc0re)又包含了由应用程序所实现的那些命令.例如,一个阅读电子公告板的应用程序包含实现一个查询电子公告板的Tcl命令的C源代码,以及另一个提取给定信息的Tcl命令.一旦这些命令存在以后,我们就可以写出Td脚本来循环地从所有的电子公告板中获取新信息并且每次显示一条,或者在磁盘文件中记录哪些信息已经被读哪些还没有?或者从一个或更多的电子公告板中查找某个特定主题的信息这些电子公告板应用程序将不必用c来实现这些附加的函数;它们可以作为Tcl脚本来写,应用程序的用户们还可以写出其它的Tcl脚本来为应用程序添加更多的函数. Td厂rk的第二个好处在于它的快速的开发速度许多有趣的窗口应用程序可以完全用TcL 脚本来写而不用一点c代码,通过使用一个称为wish的窗口shell米完成这就使用户比用c或c++编程高了一个级别,它为用户隐藏了许多c程序员必须强调的细节,与完全用c编程的工具包相比,比如Xt/Motif,使用Tcl/Tk所需要学习的东西更少,所需要写的代码也更少,Tcl/Tk的新手在学习几个小时后就可以创建有趣的用户接口许多人在从其它工具包转向Tcl/Tk后,代码量和开发时阃减少了十倍另一个Tcl/Tk快速开发的原因是Tcl是一个解释性的语言,当使用象wish这样的Tcl应用程序时,用户可以临时地生成和执行新的脚本而不需要重新编译或重启应用程序,这允许用户迅速地检验新的想法和确定bug当然,由于Tcl是解释型的,它的执行速度比编译后的c代码要慢得多但是现在的工作平台速度都非常快,只有在少数的情况下,当性能成为问题时,用户可用C来重新实现Tcl脚本中影响性能的最关键的部分.TcI的第三个好处是它成为了一种极好的”胶水语言”,因为它是可嵌人的,它可以在许多不同的程序中用于收稿日期:2001.09—03作者简介:刘莉(1965一).女,西南民族学院计算机学院讲师第4期刘莉等:一种高效的可扩展的GUI开发工具——Tcl,rk403各种不同的目的这样的话,那么写出结合所有程序特征的Td脚本就成为可能例如,任何建立在Tk基础上的窗口应用程序可以向其它的Tk应用程序发布一个Tel脚本这个特点使得多媒体效应更加容易达到:一旦用T_k建立了音频的和视频的应用程序,任何Tk应用程序都可以向它们发出”record”和”play”命令另外,电子数据表也可以由数据库应用程序来更新它自己,用户接口编辑器可以修改正运行的活动的应用程序的外观和性能等等,Tcl提供了允许应用程序一起工作的混合语言Tcl的第四个好处是使用的方便性.一旦一个用户了解了Tel/I’k后,他只需学会用于新的应用程序的几个特定的命令,就能写出该Tcl/I’k应用程序的脚本来,这就使更多的用户能够提高和个性化他们的程序正如每一种语言都以”Helloworld1,做为其第一个程序,让我们看看Tel/rk的”Helloworld”: buttonb—text”HelloWorldcommandexitpab程序的运行结果是:这简简单单的两行命令,就已经实现了一个窗口程序所具有的全部功能,并且它还可以不加任何修改地运行在X—Windows和MSWindows系统上.用鼠标点击该按纽或按空格键,该窗13将关闭,程序将退出.2用C语言创建新的Tcl/Tk命令T[:l门rk中易于增加用C/C++实现的新命令用C/C++的原因有两个,一个是因为用C/C++实现比Tcl/rk实现的效率要高些,另一方面是因为有些应用无法用T[:l/rk实现,例如与硬件相关的设备的编程接13就不能用Tcl脚本存取一种创建新的Td命令的方法是写出标准的独立的C子程序,并用Tel的exec命令来运行这些程序还有一种方法是把Td看成为一个c程序库,该库很容易集成到现有的应用程序中,通过掭加Tel解释器,你可以用Tcl脚本来配置和控制你的应用程序,再通过用Tk为程序提供一个更好的图形界面,这是Tcl最有独创性的模式.本文讨论第二种方式.首先,我们先了解一些相关的内容和例程,然后再实现新的TcI命令2.1应用程序的结构包含Tel解释器的应用程序的总体结构如图所示l’l上电YburrApcad.TU_____JCTclC代码库实现了解释器和set,while,proc之类的核心Tel命令,应用程序所特有的命令则用C/C++语言实现并注册为解释器中命令,当T_cl脚本中用到这些应用程序特定的命令时,解释器将调用这些C代码命令子程序命令子程序是在你的应用程序所能做的工作之上的有代表性的薄薄的一层.最后,你可以在C/C++中用Tcl—Eval函数直接调用TcI/Tk命令22TclMain和Tcl—ApplnitTcl库通过Fcl—Main函数来支持基本的应用结构,该函数由main程序调用,它完成三方面的工作:(1)建一个包含所有标准Tcl命令(如:set,proc等)的解释器,同时也定义了几个象argc,a瑁v 这样的Td变量,它们包含有传递给你的应用程序的命令行参数西南民族学院学报?自然科学版第27卷(2)调用Tel—Applnit函数,该函数不属于Tel库.由你的应用程序提供该函数.在Tcl—Applnit 中,你可以注册应用程序特有的Tcl命令(3)它读人一个脚本或进入一个交互式的循环中类似地,Tk—Main也具有同样的功能由于TkMain包含了Tel—Main,若你使用到了Tk命令,则只需要调用Tk—Main3用C语言创建自己的Tel命令创建自己的Td命令相对比较容易,当然,你需要存取Tel/Tk的库和头文件以及使用C和C++的编译器最简单的方法就是在main()函数中调用TelMain(),如下面的eqcmdc程所示.eqcmd.c程序用C创建了一个新的Tcl命令从Tel的观点看,该命令称为Eq.调用TclCre~teCommand函数把命令名”Eq”和C函数Eqcmd()相连接,程序代码如下#inc[ude”stdioh”#include”stdlib,h”#include”telh”/*实现了一个名为Eq的Tel命令.它比较两个参数看是否相等,相等时返回值1,否则返回0*/ intEqC~d(ClientDataclientDataTcl—Interpinterp,intargc.charargvlJ){if(argc!=3)}interp一>result=“wrong#args”:retumTCL—ERROR;*fif(strcmp(argv[1],argv[2]):=0)interp一>result=“l”:lelse{interp一>result:…0’;returnTCL一0KintTelApplnit(Tcllnterpinterp)/*该函数注册一个新的Tel命令*/mtstatus;status:Tcl—lnit(interp);/*初始化Tcl/Tk*/if(status!=TCLOK)}returnTCLERROR:Tel—Cre~teCommand(interp,”Ecj”,(TelCmclProc*)EqCmd,(ClientData)NULL,(Tel—Cmd—DeleteProc*)NUII);/*把C函数EqCmd注册为一个Tel命令Eq*/TcI—RcFileName=“~/.myapptel”;/*定义启动文件名.程序如果运行在交互式环境下,该文件将被读人intmaln(intargc,char**argv)第4期刘莉等:一种高效的可扩展的GUI开发工具——Tc1/1_k405/*把命令行参数传给Tcl—Main(),它将调用TdApplnit函数*/TclMain(argc,argv,TclApplnit)return0:编译运行以上程序后,你可以像其他Tcl命令那样在脚本中调用Eq命令EqabcclefOEql1lsetW.dig;setw2dlgokEq$wok$w214结束语“小巧,易学,高效,跨平台执行”是Tcl语言特点的集中体现.实际上,Tcl不仅仅在开发小的应用程序上有其快速,可维护强的优势,在大的应用系统方面,如操作系统及网络管理,测试系统,自控,仿真,可视化应用,计算机辅助设计等都有丰富的应用成果在商业应用方面,如SYBASE公司花费上千万美金的数据库自适应测试系统,Cygnus公司着名的集软件工程管理,源代码控制于一体的SourceNavigator,以及CayenneSoft的协同工作组件ObjectTeam等等都是应用Tcl/Tk开发的.本文的目的就是期望该工具在国内得到更广泛的使用参考文献[1]OusterhoutJKTdondTkToolkit.Addis[~一WesleyPuNishingCompany.1994[2]Welch】BPracticalProgranmlirlgiaTdandTkPrentice-HallPTR.1995[3]陆步飞,Tcl/rk大垒.中国互动出版剐htro://wwwchinapub AnEfficientExtensibleGUIDevelopmentT00l|【it——cl/】LIULi,MALi,wuke2(1D印anmentComputerSdenceandTechnology,SouthwestUniversityForNationalities,Chengdu6100412ChinaUnitedTdecn~rnmunicationsCorporatien,SichuanBr0nch,Chengdu610036)Abstract:Tcl/Tkisaconcise,efficient,portableprogramminglanguagewithC/C++applicationprogra m—minginterface.Thispaperintroducesitsspecialities,advantages,architecture,andprovidesdetaileddes criptonofhowtocreateanewTc1厂rkoommandinCKeywords:Tcl/Tk;graphicaluserinterface;interpreter。
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 命令来查看或添加它们。