tcl/tk demo

环境及版本说明:

OSX10.9 

tclsh -> tclsh8.5

wish -> wish8.5

查看本机运行环境:

1 which wish;
2 /usr/bin/wish
1 which tclsh;
2 /usr/bin/tclsh

Demo功能说明:

用户登录窗口,输入用户名,密码.与文件中存储内容校验,如果相等,则提示"登录成功",否则提示"是否需要新建用户",点击"否"退出messageBox,点击"是"新建用户.内容追加写入文件.

  1 #!/usr/bin/wish -f
  2 #
  3 # this is test login, Tk-style
  4 
  5 set filename "usrfile.pwd";
  6 
  7 proc splitf { str index } {
  8     set y [ split $str | ];
  9     list  $y;
 10     set w [ lindex $y $index ];
 11     return $w;
 12 }
 13 
 14 proc checkinfo {name pwd} {
 15     global filename;
 16     set iflag 0;
 17     set isUser 0;
 18     
 19     if { $name eq "" || $pwd eq "" } {
 20         return 005;
 21     }
 22 
 23     set fileId [ open $filename r ];   
 24     while { [ gets $fileId line ] >= 0 } {
 25         set nameInfile [ splitf $line 0 ];
 26         set cmp [ string compare $name $nameInfile ];
 27 
 28         if { $cmp != 0 } {
 29             set isUser [ expr $isUser + 1 ];
 30         } elseif { $cmp == 0 } {
 31             set pwdInfile [ splitf $line 1 ];
 32             set cmp [ string compare $pwd $pwdInfile ];
 33             if { $cmp == 0 } {
 34                 close $fileId; 
 35                 return 001; #login successful 
 36             } else {
 37                 close $fileId;
 38                 return 004; #err user pwd
 39             } 
 40         }
 41         set iflag [ expr $iflag + 1 ];
 42     }
 43     close $fileId;
 44 
 45     if { $iflag == 0 } {
 46         return 002; #file is null,creat user;
 47     }
 48     if { $iflag == $isUser } {
 49         return 002; #creat user
 50     }
 51 }
 52 
 53 proc process { uname pwd } {
 54     global filename;
 55     set returnCheck [ checkinfo $uname $pwd ];
 56     switch -- $returnCheck {
 57         001 { tk_messageBox -type ok -message "you are login successful" }
 58         002 { set answer [ tk_messageBox -type yesno -icon question \
 59                  -message "you need creat a user" ] ;
 60                 switch -- $answer {
 61                     no { }
 62                     yes { puts stdout [ createusr $uname $pwd ] }
 63                 }
 64             }
 65         //003 { tk_messageBox -type ok -icon warning -message "$filename file is null" }  
 66         004 { tk_messageBox -type ok -icon error -message "input err of user pwd" }
 67         005 { tk_messageBox -type ok -icon info -message "user and pwd is not null" }
 68         default { tk_messageBox -type ok -icon error -message "system err" }
 69     }
 70 }
 71 
 72 proc createusr { uname pwd } {
 73     global filename;
 74     set fileId [ open $filename a ];
 75     puts $fileId "$uname|$pwd" ;
 76     close $fileId;
 77     return 1; 
 78 }
 79 wm title . LOGIN
 80 wm maxsize . 500 300
 81 wm minsize . 500 300
 82 wm resizable . 500 300
 83 wm geometry . 500x300+300+200
 84 
 85 label .ulname -text "userName"
 86 
 87 entry .tuname -textvariable name 
 88 
 89 label .ulpwd -text "userPwd"
 90 
 91 entry .tupwd -textvariable pwd
 92  
 93 button .bOK -text OK \
 94   -command { puts stdout [ process $name $pwd] }
 95 
 96 button .bExit -text Exit \
 97   -command {exit}
 98  
 99 
100 place .ulname -x 110 -y 50 
101 place .tuname -x 200 -y 50 
102 place .ulpwd -x 110 -y 100 
103 place .tupwd -x 200 -y 100 
104 
105 place .bOK -x 150 -y 150  
106 place .bExit -x 280 -y 150
1 wish tk.tcl

配置文件格式:

1 cat usrfile.pwd
2 userTmp|abc123

此Demo涉及控件,语法.足够日常使用.望对新学者有点帮助.

特别需要注意:

1- 所有的关键字与{ 等之间一定要有空格,否则无法解析.

错误: proc sum{arg1 arg2}{
正确: proc sum { arg1 arg2 } {

2- proc if switch等需要用{}包含的body 左括号一定要写到 if {} { 与关键字同行

1 proc sum { arg1 arg2 }
2 
3 {
4 
5   ....
6 
7 }

以上代码将提示:

Error in startup script: wrong # args: should be "proc name args body"

 while executing

"proc sum {arg1 arg2} "

    (file "a.tcl" line 3)

需要修改为:

1 proc sum { arg1 arg2 } {
2 
3   ....
4 
5 }

 

 

学习网站:

http://www.tcl.tk/man/tcl8.5/TclCmd/contents.htm

http://www2.tcl.tk/1062

http://blog.csdn.net/dulixin/article/category/366323

 

read-only access to git repository:

git clone https://github.com/galoishelley/tcltk

 

转载于:https://www.cnblogs.com/galoishelley/p/3411973.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive高级操作

Hive高级操作 1 Hive的数据类型 1.1 原子数据类型 (1)Hive 是用 Java 开发的,Hive 里的基本数据类型和 java 的基本数据类型也是一一对应的, 除了 String 类型。 (2)有符号的整数类型:TINYIN…

05.序列模型 W2.自然语言处理与词嵌入(作业:词向量+Emoji表情生成)

文章目录作业1:1. 余弦相似度2. 单词类比3. 词向量纠偏3.1 消除对非性别词语的偏见3.2 性别词的均衡算法作业2:Emojify表情生成1. Baseline model: Emojifier-V11.1 数据集1.2 模型预览1.3 实现 Emojifier-V11.4 在训练集上测试2. Emojifier-V2: Using L…

LeetCode 688. “马”在棋盘上的概率(DP)

文章目录1. 题目2. 解题1. 题目 已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始。即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1)。 现有一个 “马”(也译作 “骑士”)位于 (r, c) ,并打算进行…

LeetCode 第 36 场双周赛(304/2204,前13.8%)

文章目录1. 比赛结果2. 题目1. LeetCode 5515. 设计停车系统 easy2. LeetCode 5516. 警告一小时内使用相同员工卡大于等于三次的人 medium3. LeetCode 5518. 给定行和列的和求可行矩阵 medium4. LeetCode 5517. 找到处理最多请求的服务器 hard1. 比赛结果 做出来3题&#xff0…

数据库实例:用户注册

1.根据结构创建表的脚本如下 createtable py_users( id int unsigned auto_increment not null primary key, uname varchar(20) not null, upwd char(40) not null, is_delete bit not null default 0 ); 如下流程图,接下来的代码就按照这个逻辑来写 2.创建user…

HBase原理

目录 HBase原理 1 HBase架构 2 HBase中的核心概念 3 HBase的存储机制 4 HBase的寻址机制 5 HBase的读写流程 6 HBase的设计 7 HBase和Hive的整合 HBase原理 1 HBase架构 HBase的架构为主从架构,HMaster为主节点,HRegionServer为从节点 &#x…

数据库实例:用户登录

如下遍流程图,接下来的代码就按照这个逻辑来写 创建user_login.py文件,代码如下 #codingutf-8 from MySQLdb import* from hashlib importsha1 if __name____main__: try: #接收输入用户名、密码 unameraw_input(请输入用户名&…

数据库实例:mysql与mongo结合用户登录

加入mongodb后登录逻辑如下图,将图中nosql的位置换为mongodb即可 用户数据存储的集合名称为py_users,文档格式为{uname:用户名,upwd:密码} 将原来MySQL操作的代码封装到一个方法中,代码如下 def mysql_login(): #mongodb中没有则到mysql中…

LeetCode 1609. 奇偶树(层序遍历)

文章目录1. 题目2. 解题1. 题目 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。偶数下标 层上的所有节点的值都…

数据的特征工程

数据的特征工程 1 什么是数据的特征工程 特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性。 特征工程的意义:将直接影响模型的预测结果。 2 数据的来源与类型 2.1 数据的来源 企业日益积累…

数据库实例:mysql与redis结合用户登录

加入redis后登录逻辑如下图,将图中nosql的位置换为redis即可 用户数据存的键为用户名,值为密码 将原来MySQL操作的代码封装到一个方法中,代码如下 defmysql_login(): #redis中没有则到mysql中查询 sqlselect upwd from py_users wher…

LeetCode 1610. 可见点的最大数目(atan2函数求夹角)

文章目录1. 题目2. 解题1. 题目 给你一个点数组 points 和一个表示角度的整数 angle ,你的位置是 location ,其中 location [posx, posy] 且 points[i] [xi, yi] 都表示 X-Y 平面上的整数坐标。 最开始,你面向东方进行观测。你 不能 进行…

[翻译]API Guides - Bound Services

官方文档原文地址:http://developer.android.com/guide/components/bound-services.html 一个Bound Service是一个客户端-服务器接口的服务。一个Bound Service允许组件(像activity)绑定一个service,发送请求,接受结果…

sklearn数据集与估计器

sklearn数据集与估计器 1 sklearn数据集 (1)数据来源:大多数以文件的形式 (csv文件..), 因为mysql有性能瓶颈、读取速度遭到限制,数据大的时候很费时间 (2)读取数据的工具&#…

LeetCode 935. 骑士拨号器(动态规划)

文章目录1. 题目2. 解题1. 题目 国际象棋中的骑士可以按下图所示进行移动: 这一次,我们将 “骑士” 放在电话拨号盘的任意数字键(如上图所示)上, 接下来,骑士将会跳 N-1 步。每一步必须是从一个数字键跳到…

k近邻算法(KNN)-分类算法

k近邻算法(KNN)-分类算法 1 概念 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。 k-近邻算法采用测量不同特征值之间的距离来进行分类。 2 优缺点 优点:简单&a…

LeetCode 822. 翻转卡片游戏(哈希)

文章目录1. 题目2. 解题1. 题目 在桌子上有 N 张卡片,每张卡片的正面和背面都写着一个正数(正面与背面上的数有可能不一样)。 我们可以先翻转任意张卡片,然后选择其中一张卡片。 如果选中的那张卡片背面的数字 X 与任意一张卡片…

朴素贝叶斯算法-分类算法

朴素贝叶斯算法-分类算法 1 概率基础 概率定义为一件事情发生的可能性 联合概率:包含多个条件,且所有条件同时成立的概率,记作P(A,B) 条件概率:事件A在另一个事件B已经发生条件下的发送概率,记作P(A|B) 在A1,A2相…

django简介及环境搭建

MVC简介 MVC框架的核心思想是:解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容 M全拼为Model,主要封装对数据库层的访问,内嵌ORM框架,实现面向对象的编程来操作数据…

LeetCode 1312. 让字符串成为回文串的最少插入次数(区间DP)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。 请你返回让 s 成为回文串的 最少操作次数 。 「回文串」是正读和反读都相同的字符串。 示例 1: 输入:s "zzazz" 输出&…