Tcl-Tk - Hướng dẫn nhanh

Tcl là dạng rút gọn của Tool Command Language. John Ousterhout của Đại học California, Berkeley, đã thiết kế nó. Nó là sự kết hợp của ngôn ngữ kịch bản và trình thông dịch của riêng nó được nhúng vào ứng dụng, chúng tôi phát triển cùng với nó.

Tcl ban đầu được phát triển cho Unix. Sau đó, nó được chuyển sang Windows, DOS, OS / 2 và Mac OSX. Tcl gần giống với các ngôn ngữ shell unix khác như Bourne Shell (Sh), C Shell (csh), Korn Shell (sh) và Perl.

Nó nhằm mục đích cung cấp khả năng cho các chương trình tương tác với các chương trình khác và cũng để hoạt động như một trình thông dịch có thể nhúng. Mặc dù mục đích ban đầu là cho phép các chương trình tương tác, nhưng bạn có thể tìm thấy các ứng dụng chính thức được viết bằng Tcl / Tk.

Đặc điểm của Tcl

Các tính năng của Tcl như sau:

  • Giảm thời gian phát triển.

  • Bộ giao diện người dùng mạnh mẽ và đơn giản có tích hợp TK.

  • Viết một lần, chạy mọi nơi. Nó chạy trên Windows, Mac OS X và hầu như trên mọi nền tảng Unix.

  • Khá dễ dàng để bắt đầu cho các lập trình viên có kinh nghiệm; vì ngôn ngữ này rất đơn giản nên họ có thể học Tcl trong vài giờ hoặc vài ngày.

  • Bạn có thể dễ dàng mở rộng các ứng dụng hiện có với Tcl. Ngoài ra, có thể bao gồm Tcl trong C, C ++ hoặc Java vào Tcl hoặc ngược lại.

  • Có một bộ chức năng mạng mạnh mẽ.

  • Cuối cùng, nó là một mã nguồn mở, miễn phí và có thể được sử dụng cho các ứng dụng thương mại mà không có bất kỳ giới hạn nào.

Các ứng dụng

Tcl là một ngôn ngữ có mục đích chung và bạn có thể tìm thấy Tcl ở khắp mọi nơi. Nó bao gồm,

  • Các trang web có thể mở rộng thường được hỗ trợ bởi cơ sở dữ liệu.
  • Máy chủ web hiệu suất cao được xây dựng bằng TclHttpd.
  • Tcl với các trang web dựa trên CGI.
  • Các ứng dụng GUI trên máy tính để bàn.
  • Các ứng dụng được nhúng.

Thiết lập môi trường cục bộ

Nếu bạn sẵn sàng thiết lập môi trường của mình cho Tcl, bạn cần có hai ứng dụng phần mềm sau trên máy tính của mình -

  • Trình soạn thảo văn bản
  • Thông dịch viên Tcl.

Trình soạn thảo văn bản

Điều này sẽ được sử dụng để nhập chương trình của bạn. Ví dụ về một vài trình soạn thảo văn bản bao gồm Windows Notepad, lệnh OS Edit, Brief, Epsilon, EMACS và vim hoặc vi.

Tên và phiên bản của trình soạn thảo văn bản có thể khác nhau trên các hệ điều hành khác nhau. Ví dụ: Notepad sẽ được sử dụng trên Windows và vim hoặc vi có thể được sử dụng trên windows cũng như Linux hoặc UNIX.

Các tệp bạn tạo bằng trình soạn thảo văn bản của mình được gọi là tệp nguồn và chứa mã nguồn chương trình. Các tệp nguồn cho các chương trình Tcl được đặt tên với phần mở rộng".tcl".

Trước khi bắt đầu lập trình, hãy đảm bảo rằng bạn đã có sẵn một trình soạn thảo văn bản và bạn có đủ kinh nghiệm để viết một chương trình máy tính, lưu nó vào một tệp, xây dựng nó và cuối cùng là thực thi nó.

Trình thông dịch Tcl

Nó chỉ là một chương trình nhỏ cho phép bạn gõ các lệnh Tcl và thực hiện từng dòng một. Nó dừng thực thi tệp tcl, trong trường hợp, nó gặp lỗi không giống như trình biên dịch thực thi đầy đủ.

Hãy có một tệp helloWorld.tcl như sau. Chúng tôi sẽ sử dụng chương trình này như một chương trình đầu tiên, chúng tôi chạy trên nền tảng bạn chọn.

#!/usr/bin/tclsh

puts "Hello World!"

Cài đặt trên Windows

Tải xuống phiên bản mới nhất cho trình cài đặt windows từ danh sách các tệp nhị phân Active Tcl có sẵn. Phiên bản cộng đồng Tcl đang hoạt động miễn phí cho mục đích sử dụng cá nhân.

Chạy tệp thực thi đã tải xuống để cài đặt Tcl, có thể thực hiện bằng cách làm theo hướng dẫn trên màn hình.

Bây giờ, chúng ta có thể xây dựng và chạy tệp Tcl say helloWorld.tcl bằng cách chuyển sang thư mục chứa tệp bằng lệnh 'cd' và sau đó thực thi chương trình theo các bước sau

C:\Tcl> tclsh helloWorld.tcl

Chúng ta có thể xem kết quả sau.

C:\Tcl> helloWorld

C: \ Tcl là thư mục, tôi đang sử dụng để lưu các mẫu của mình. Bạn có thể thay đổi nó thành thư mục mà bạn đã lưu các chương trình Tcl.

Cài đặt trên Linux

Hầu hết các hệ điều hành Linux đều có sẵn Tcl và bạn có thể bắt đầu ngay lập tức với các hệ điều hành đó. Trong trường hợp không có sẵn, bạn có thể sử dụng lệnh sau để tải xuống và cài đặt Tcl-Tk.

$ yum install tcl tk

Bây giờ, chúng ta có thể xây dựng và chạy tệp Tcl say helloWorld.tcl bằng cách chuyển sang thư mục chứa tệp bằng lệnh 'cd' và sau đó thực thi chương trình theo các bước sau:

$ tclsh helloWorld.tcl

Chúng ta có thể thấy kết quả sau:

$ hello world

Cài đặt trên Hệ thống dựa trên Debian

Trong trường hợp, nó không có sẵn trong hệ điều hành của bạn, bạn có thể sử dụng lệnh sau để tải xuống và cài đặt Tcl-Tk:

$ sudo apt-get install tcl tk

Bây giờ, chúng ta có thể xây dựng và chạy tệp Tcl say helloWorld.tcl bằng cách chuyển sang thư mục chứa tệp bằng lệnh 'cd' và sau đó thực thi chương trình theo các bước sau:

$ tclsh helloWorld.tcl

Chúng ta có thể thấy kết quả sau:

$ hello world

Cài đặt trên Mac OS X

Tải xuống phiên bản mới nhất cho gói Mac OS X từ danh sách các tệp nhị phân Active Tcl có sẵn. Phiên bản cộng đồng Tcl đang hoạt động miễn phí cho mục đích sử dụng cá nhân.

Chạy tệp thực thi đã tải xuống để cài đặt Active Tcl, có thể được thực hiện bằng cách làm theo hướng dẫn trên màn hình.

Bây giờ, chúng ta có thể xây dựng và chạy tệp Tcl say helloWorld.tcl bằng cách chuyển sang thư mục chứa tệp bằng 'cd' và sau đó thực thi chương trình theo các bước sau:

$ tclsh helloWorld.tcl

Chúng ta có thể thấy kết quả sau:

$ hello world

Cài đặt từ tệp nguồn

Bạn có thể sử dụng tùy chọn cài đặt từ các tệp nguồn khi không có gói nhị phân. Thông thường, người ta ưu tiên sử dụng tệp nhị phân Tcl cho Windows và Mac OS X, vì vậy chỉ biên dịch các nguồn trên hệ thống dựa trên unix được hiển thị bên dưới.

  • Tải xuống các tệp nguồn.

  • Bây giờ, hãy sử dụng các lệnh sau để giải nén, biên dịch và xây dựng sau khi chuyển sang thư mục đã tải xuống.

$ tar zxf tcl8.6.1-src.tar.gz $ cd tcl8.6.1
$ cd unix $ ./configure —prefix=/opt —enable-gcc
$ make $ sudo make install

Note - Đảm bảo rằng, bạn thay đổi tên tệp thành phiên bản bạn đã tải xuống ở lệnh 1 và 2 ở trên.

Trong Tcl, chúng tôi phân loại một số biến là các biến đặc biệt và chúng có cách sử dụng / chức năng được xác định trước. Danh sách các biến đặc biệt được liệt kê bên dưới.

Sr.No. Biến & Mô tả Đặc biệt
1

argc

Đề cập đến một số đối số dòng lệnh.

2

argv

Tham chiếu đến danh sách chứa các đối số dòng lệnh.

3

argv0

Đề cập đến tên tệp của tệp đang được diễn giải hoặc tên mà chúng tôi gọi tập lệnh.

4

env

Được sử dụng để biểu diễn mảng các phần tử là biến môi trường.

5

errorCode

Cung cấp mã lỗi cho lỗi Tcl gần đây nhất.

6

errorInfo

Cung cấp dấu vết ngăn xếp cho lỗi Tcl gần đây nhất.

7

tcl_interactive

Được sử dụng để chuyển đổi giữa các chế độ tương tác và không tương tác bằng cách đặt giá trị này thành 1 và 0 tương ứng.

số 8

tcl_library

Được sử dụng để thiết lập vị trí của các thư viện Tcl tiêu chuẩn.

9

tcl_pkgPath

Cung cấp danh sách các thư mục nơi các gói thường được cài đặt.

10

tcl_patchLevel

Đề cập đến cấp bản vá hiện tại của trình thông dịch Tcl.

11

tcl_platform

Được sử dụng để biểu diễn mảng các phần tử với các đối tượng bao gồm byteOrder, machine, osVersion, platform và os.

12

tcl_precision

Đề cập đến độ chính xác tức là số chữ số cần giữ lại khi chuyển đổi thành số dấu phẩy động thành chuỗi. Giá trị mặc định là 12.

13

tcl_prompt1

Đề cập đến lời nhắc chính.

14

tcl_prompt2

Đề cập đến lời nhắc phụ với các lệnh không hợp lệ.

15

tcl_rcFileName

Cung cấp tệp khởi động cụ thể cho người dùng.

16

tcl_traceCompile

Được sử dụng để kiểm soát việc theo dõi quá trình biên dịch mã bytecode. Sử dụng 0 cho không có đầu ra, 1 cho tóm tắt và 2 cho chi tiết.

17

tcl_traceExec

Được sử dụng để kiểm soát việc theo dõi việc thực thi bytecode. Sử dụng 0 cho không có đầu ra, 1 cho tóm tắt và 2 cho chi tiết.

18

tcl_version

Trả về phiên bản hiện tại của trình thông dịch Tcl.

Các biến đặc biệt ở trên có ý nghĩa đặc biệt đối với trình thông dịch Tcl.

Ví dụ về việc sử dụng các biến đặc biệt Tcl

Hãy xem một số ví dụ cho các biến đặc biệt.

Phiên bản Tcl

#!/usr/bin/tclsh

puts $tcl_version

Khi bạn chạy chương trình, bạn sẽ nhận được một kết quả tương tự như hình dưới đây:

8.6

Đường dẫn môi trường Tcl

#!/usr/bin/tclsh

puts $env(PATH)

Khi bạn chạy chương trình, bạn sẽ nhận được một kết quả tương tự như hình dưới đây:

/home/cg/root/GNUstep/Tools:/usr/GNUstep/Local/Tools:/usr/GNUstep/
System/Tools:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/webmaster/.local/bin:/
home/webmaster/bin:/usr/local/scriba/bin:/usr/local/smlnj/
bin:/usr/local/bin/std:/usr/local/bin/extra:/usr/local/fantom/bin:/usr/
local/dart/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/opt/mono/
bin:/opt/mono/lib/mono/4.5:/usr/local/bin:.:/usr/libexec/sdcc:/usr/local/
icon-v950/bin:/usr/local/mozart/bin:/opt/Pawn/bin:/opt/jdk1.7.0_75/bin:/
opt/jdk1.7.0_75/jre/bin:/opt/pash/Source/PashConsole/bin/Debug/

Đường dẫn gói Tcl

#!/usr/bin/tclsh

puts $tcl_pkgPath

Khi bạn chạy chương trình, bạn sẽ nhận được một kết quả tương tự như hình dưới đây:

/usr/lib64/tcl8.6 /usr/share/tcl8.6 /usr/lib64/tk8.6 /usr/share/tk8.6

Thư viện Tcl

#!/usr/bin/tclsh

puts $tcl_library

Khi bạn chạy chương trình, bạn sẽ nhận được một kết quả tương tự như hình dưới đây:

/usr/share/tcl8.6

Cấp bản vá Tcl

#!/usr/bin/tclsh

puts $tcl_patchLevel

Khi bạn chạy chương trình, bạn sẽ nhận được một kết quả tương tự như hình dưới đây:

8.6.6

Tcl Precision

#!/usr/bin/tclsh

puts $tcl_precision

Khi bạn chạy chương trình, bạn sẽ nhận được một kết quả tương tự như hình dưới đây:

0

Tcl Startup File

#!/usr/bin/tclsh

puts $tcl_rcFileName

Khi bạn chạy chương trình, bạn sẽ nhận được một kết quả tương tự như hình dưới đây:

~/.tclshrc

Tcl khá đơn giản để học và hãy bắt đầu tạo chương trình Tcl đầu tiên của chúng ta!

Chương trình Tcl đầu tiên

Hãy để chúng tôi viết một chương trình Tcl đơn giản. Tất cả các tệp Tcl sẽ có phần mở rộng, tức là .tcl. Vì vậy, hãy đặt mã nguồn sau vào tệp test.tcl.

#!/usr/bin/tclsh

puts "Hello, World!"

Giả sử, môi trường Tcl được thiết lập chính xác; hãy chạy chương trình sau khi chuyển sang thư mục của tệp và sau đó thực thi chương trình bằng cách sử dụng -

$ tclsh test.tcl

Chúng ta sẽ nhận được kết quả sau:

Hello, World!

Bây giờ chúng ta hãy xem cấu trúc cơ bản của chương trình Tcl, để bạn có thể dễ dàng hiểu các khối xây dựng cơ bản của ngôn ngữ Tcl. Trong Tcl, chúng tôi sử dụng dòng mới hoặc dấu chấm phẩy để kết thúc dòng mã trước đó. Nhưng dấu chấm phẩy là không cần thiết, nếu bạn đang sử dụng dòng mới cho mỗi lệnh.

Bình luận

Nhận xét giống như văn bản trợ giúp trong chương trình Tcl của bạn và trình thông dịch bỏ qua chúng. Nhận xét có thể được viết bằng dấu thăng _ (#) ở đầu.

#!/usr/bin/tclsh

# my first program in Tcl
puts "Hello World!"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Hello World!

Nhận xét nhiều dòng hoặc khối được viết bằng cách sử dụng 'nếu' với điều kiện '0'. Một ví dụ đã được biểu diễn ở dưới.

#!/usr/bin/tclsh

if 0 {
   my first program in Tcl program
   Its very simple
}
puts "Hello World!"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Hello World!

Nhận xét nội tuyến sử dụng; #. Một ví dụ được đưa ra dưới đây.

#!/usr/bin/tclsh

puts "Hello World!" ;# my first print in Tcl program

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Hello World!

Định danh

Định danh Tcl là tên được sử dụng để xác định một biến, hàm hoặc bất kỳ mục nào khác do người dùng định nghĩa. Mã định danh bắt đầu bằng chữ cái A đến Z hoặc từ a đến z hoặc dấu gạch dưới (_) theo sau là không hoặc nhiều chữ cái, dấu gạch dưới, đô la ($) và chữ số (0 đến 9).

Tcl không cho phép các ký tự dấu câu như @ và% trong số nhận dạng. Tcl là mộtcase sensitive_ ngôn ngữ. Như vậy Nhân lựcnhân lực là hai định danh khác nhau trong Tcl. Dưới đây là một số ví dụ về số nhận dạng được chấp nhận -

mohd       zara    abc   move_name  a_123
myname50   _temp   j     a23b9      retVal

Từ dành riêng

Danh sách sau đây cho thấy một số từ dành riêng trong Tcl. Những từ dành riêng này không được dùng làm hằng số hoặc biến hoặc bất kỳ tên định danh nào khác.

sau nối thêm mảng auto_execok
auto_import auto_load auto_load_index auto_qualify
nhị phân Bgerror phá vỡ nắm lấy
CD Đồng hồ đóng kết hợp
tiếp tục Dde mặc định khác
elseif Mã hóa eof lỗi
đánh giá Exec lối ra expr
fblocked Fconfigure fcopy tập tin
tập tin Tuôn ra cho cho mỗi
định dạng Được quả cầu toàn cầu
lịch sử Nếu thông tin xen vào
tham gia Lappend lindex linsert
danh sách Sức bền tải lrange
nơi chôn cất Lsearch sắp xếp không gian tên
mở Gói pid pkg_mkIndex
proc Puts pwd đọc
regexp Regsub đổi tên nguồn
trở về Quét tìm bộ
ổ cắm Nguồn tách ra chuỗi
phụ Công tắc điện tclLog nói
thời gian Dấu vết không xác định không đặt
cập nhật Thăng cấp upvar Biến đổi
vwait Trong khi

Khoảng trắng trong Tcl

Một dòng chỉ chứa khoảng trắng, có thể kèm theo chú thích, được gọi là blank line, và một trình thông dịch Tcl hoàn toàn bỏ qua nó.

Khoảng trắng là thuật ngữ được sử dụng trong Tcl để mô tả khoảng trống, tab, ký tự dòng mới và nhận xét. Khoảng trắng phân tách một phần của một câu lệnh với phần khác và cho phép trình thông dịch xác định vị trí của một phần tử trong một câu lệnh, chẳng hạn như đặt, kết thúc và phần tử tiếp theo bắt đầu. Do đó, trong câu lệnh sau:

#!/usr/bin/tclsh

puts "Hello World!"

Phải có ít nhất một ký tự khoảng trắng (thường là dấu cách) giữa "put" và "Hello World!" để thông dịch viên có thể phân biệt chúng. Mặt khác, trong câu lệnh sau:

#!/usr/bin/tclsh

puts [expr 3 + 2] ;# print sum of the 3 and 2

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

5

Không cần ký tự khoảng trắng nào giữa 3 và +, hoặc giữa + và 2; mặc dù vậy, bạn có thể tự do đưa vào một số nếu bạn muốn vì mục đích dễ đọc.

Như bạn đã biết, Tcl là một ngôn ngữ lệnh của Công cụ, các lệnh là phần quan trọng nhất của ngôn ngữ. Các lệnh Tcl được tích hợp sẵn trong ngôn ngữ với mỗi lệnh có chức năng được xác định trước riêng. Các lệnh này tạo thành các từ dành riêng của ngôn ngữ và không thể được sử dụng để đặt tên biến khác. Ưu điểm của các lệnh Tcl này là bạn có thể xác định cách triển khai của riêng mình cho bất kỳ lệnh nào trong số các lệnh này để thay thế chức năng tích hợp ban đầu.

Mỗi lệnh Tcl xác nhận đầu vào và nó làm giảm công việc của trình thông dịch.

Lệnh Tcl thực chất là một danh sách các từ, với từ đầu tiên đại diện cho lệnh sẽ được thực hiện. Các từ tiếp theo đại diện cho các đối số. Để nhóm các từ thành một đối số, chúng tôi đặt nhiều từ bằng "" hoặc {}.

Cú pháp của lệnh Tcl như sau:

commandName argument1 argument2 ... argumentN

Hãy xem một ví dụ đơn giản về lệnh Tcl:

#!/usr/bin/tclsh

puts "Hello, world!"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Hello, world!

Trong đoạn mã trên, 'put' là lệnh Tcl và "Hello World" là đối số1. Như đã nói trước đây, chúng tôi đã sử dụng "" để nhóm hai từ.

Hãy xem một ví dụ khác về lệnh Tcl với hai đối số:

#!/usr/bin/tclsh

puts stdout "Hello, world!"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Hello, world!

Trong đoạn mã trên, 'put' là lệnh Tcl, 'stdout' là đối số1 và "Hello World" là đối số2. Ở đây, stdout làm cho chương trình in trong thiết bị đầu ra tiêu chuẩn.

Thay thế lệnh

Trong thay thế lệnh, dấu ngoặc vuông được sử dụng để đánh giá các tập lệnh bên trong dấu ngoặc vuông. Dưới đây là một ví dụ đơn giản để thêm hai số:

#!/usr/bin/tclsh

puts [expr 1 + 6 + 9]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

16

Thay thế biến

Trong thay thế biến, $ được sử dụng trước tên biến và điều này trả về nội dung của biến. Dưới đây là một ví dụ đơn giản để đặt một giá trị cho một biến và in nó.

#!/usr/bin/tclsh

set a 3
puts $a

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

3

Thay thế dấu gạch chéo ngược

Chúng thường được gọi là escape sequences; với mỗi dấu gạch chéo ngược, theo sau là một chữ cái có ý nghĩa riêng. Dưới đây là một ví dụ đơn giản về thay thế dòng mới:

#!/usr/bin/tclsh

puts "Hello\nWorld"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Hello
World

Kiểu dữ liệu ban đầu của Tcl là chuỗi và thường chúng ta có thể tìm thấy dấu ngoặc kép trên Tcl dưới dạng ngôn ngữ chỉ chuỗi. Các kiểu dữ liệu nguyên thủy này lần lượt tạo ra các kiểu dữ liệu tổng hợp cho danh sách và mảng kết hợp. Trong Tcl, kiểu dữ liệu không chỉ có thể biểu diễn các đối tượng Tcl đơn giản mà còn có thể biểu diễn các đối tượng phức tạp như tay cầm, đối tượng đồ họa (chủ yếu là widget) và các kênh I / O. Chúng ta hãy xem xét chi tiết về từng điều trên.

Đối tượng Tcl đơn giản

Trong Tcl, cho dù đó là một số nguyên, boolean, số dấu phẩy động hay một chuỗi. Khi muốn sử dụng một biến, bạn có thể gán trực tiếp giá trị cho nó, không có bước khai báo trong Tcl. Có thể có các đại diện bên trong cho các loại đối tượng khác nhau này. Nó có thể chuyển đổi kiểu dữ liệu này sang kiểu dữ liệu khác khi được yêu cầu. Cú pháp để gán giá trị cho biến như sau:

#!/usr/bin/tclsh

set myVariable 18
puts $myVariable

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

18

Câu lệnh trên sẽ tạo một tên biến myVariable và lưu trữ nó dưới dạng một chuỗi mặc dù, chúng tôi chưa sử dụng dấu ngoặc kép. Bây giờ, nếu chúng ta cố gắng thực hiện một số học trên biến, nó sẽ tự động chuyển thành số nguyên. Một ví dụ đơn giản được hiển thị bên dưới:

#!/usr/bin/tclsh

set myVariable 18
puts [expr $myVariable + 6 + 9]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

33

Một điều quan trọng cần lưu ý là, các biến này không có bất kỳ giá trị mặc định nào và phải được gán giá trị trước khi chúng được sử dụng.

Nếu chúng ta cố gắng in bằng cách sử dụng lệnh, số sẽ được chuyển thành chuỗi thích hợp. Có hai cách biểu diễn, bên trong và bên ngoài, giúp Tcl dễ dàng tạo ra các cấu trúc dữ liệu phức tạp so với các ngôn ngữ khác. Ngoài ra, Tcl hiệu quả hơn do bản chất đối tượng động của nó.

Biểu diễn chuỗi

Không giống như các ngôn ngữ khác, trong Tcl, bạn không cần bao gồm dấu ngoặc kép khi nó chỉ là một từ duy nhất. Một ví dụ có thể là -

#!/usr/bin/tclsh

set myVariable hello
puts $myVariable

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

hello

Khi muốn biểu diễn nhiều chuỗi, chúng ta có thể sử dụng dấu ngoặc kép hoặc dấu ngoặc nhọn. Nó được hiển thị bên dưới -

#!/usr/bin/tclsh

set myVariable "hello world"
puts $myVariable set myVariable {hello world} puts $myVariable

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

hello world
hello world

Danh sách

Danh sách không là gì ngoài một nhóm các yếu tố. Một nhóm từ sử dụng dấu ngoặc kép hoặc dấu ngoặc nhọn có thể được sử dụng để biểu diễn một danh sách đơn giản. Một danh sách đơn giản được hiển thị bên dưới:

#!/usr/bin/tclsh

set myVariable {red green blue}
puts [lindex $myVariable 2] set myVariable "red green blue" puts [lindex $myVariable 1]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

blue
green

Mảng liên kết

Mảng liên kết có chỉ mục (khóa) không nhất thiết phải là số nguyên. Nó thường là một chuỗi hoạt động giống như các cặp giá trị khóa. Một ví dụ đơn giản được hiển thị bên dưới:

#!/usr/bin/tclsh

set  marks(english) 80
puts $marks(english) set marks(mathematics) 90 puts $marks(mathematics)

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

80
90

Xử lý

Tay cầm Tcl thường được sử dụng để biểu diễn tệp và đối tượng đồ họa. Chúng có thể bao gồm xử lý các yêu cầu mạng và cả các kênh khác như giao tiếp cổng nối tiếp, ổ cắm hoặc thiết bị I / O. Sau đây là một ví dụ nơi một tệp xử lý được tạo.

set myfile [open "filename" r]

Bạn sẽ xem chi tiết hơn về các tệp trong chương I / O tệp Tcl .

Trong Tcl, không có khái niệm khai báo biến. Khi gặp một tên biến mới, Tcl sẽ định nghĩa một biến mới.

Đặt tên biến

Tên của các biến có thể chứa bất kỳ ký tự và độ dài nào. Bạn thậm chí có thể có khoảng trắng bằng cách đặt biến trong dấu ngoặc nhọn, nhưng nó không được ưu tiên.

Lệnh set được sử dụng để gán giá trị cho một biến. Cú pháp cho lệnh set là,

set variableName value

Dưới đây là một số ví dụ về các biến số:

#!/usr/bin/tclsh

set variableA 10
set {variable B} test
puts $variableA puts ${variable B}

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

10
test

Như bạn thấy trong chương trình trên, $ variableName được sử dụng để lấy giá trị của biến.

Nhập động

Tcl là một ngôn ngữ được gõ động. Giá trị của biến có thể được chuyển đổi động thành kiểu cần thiết khi được yêu cầu. Ví dụ: một số 5 được lưu trữ dưới dạng chuỗi sẽ được chuyển đổi thành số khi thực hiện một phép toán số học. Nó được hiển thị bên dưới -

#!/usr/bin/tclsh

set variableA "10"
puts $variableA
set sum [expr $variableA +20]; puts $sum

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

10
30

Biểu thức toán học

Như bạn có thể thấy trong ví dụ trên, expr được sử dụng để biểu diễn biểu thức toán học. Độ chính xác mặc định của Tcl là 12 chữ số. Để có được kết quả dấu phẩy động, chúng ta nên thêm ít nhất một chữ số thập phân. Một ví dụ đơn giản giải thích điều trên.

#!/usr/bin/tclsh

set variableA "10"
set result [expr $variableA / 9]; puts $result
set result [expr $variableA / 9.0]; puts $result
set variableA "10.0"
set result [expr $variableA / 9]; puts $result

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

1
1.1111111111111112
1.1111111111111112

Trong ví dụ trên, bạn có thể thấy ba trường hợp. Trong trường hợp đầu tiên, số bị chia và số bị chia là các số nguyên và kết quả là chúng ta nhận được một số nguyên. Trong trường hợp thứ hai, số bị chia là số thập phân và trong trường hợp thứ ba, số bị chia là số thập phân. Trong cả trường hợp thứ hai và thứ ba, kết quả là chúng ta nhận được một số thập phân.

Trong đoạn mã trên, bạn có thể thay đổi độ chính xác bằng cách sử dụng biến đặc biệt tcl_pre precision. Nó được hiển thị bên dưới -

#!/usr/bin/tclsh

set variableA "10"
set tcl_precision 5
set result [expr $variableA / 9.0]; puts $result

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

1.1111

Một toán tử là một ký hiệu yêu cầu trình biên dịch thực hiện các thao tác toán học hoặc logic cụ thể. Ngôn ngữ Tcl có nhiều toán tử tích hợp sẵn và cung cấp các loại toán tử sau:

  • Toán tử số học
  • Toán tử quan hệ
  • Toán tử logic
  • Toán tử Bitwise
  • Nhà khai thác bậc ba

Chương này sẽ giải thích từng toán tử số học, quan hệ, logic, bitwise và bậc ba.

Toán tử số học

Bảng sau hiển thị tất cả các toán tử số học được ngôn ngữ Tcl hỗ trợ. Giả sử biến 'A' giữ 10 và biến 'B' giữ 20, sau đó -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
+ Thêm hai toán hạng A + B sẽ cho 30
- Trừ toán hạng thứ hai với toán hạng đầu tiên A - B sẽ cho -10
* Nhân cả hai toán hạng A * B sẽ cho 200
/ Chia tử số cho tử số B / A sẽ cho 2
% Toán tử mô đun và phần còn lại của sau một phép chia số nguyên B% A sẽ cho 0

Toán tử quan hệ

Bảng sau đây cho thấy tất cả các toán tử quan hệ được hỗ trợ bởi ngôn ngữ Tcl. Giả sử biếnA giữ 10 và biến B giữ 20, sau đó -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
== Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu có thì điều kiện trở thành true. (A == B) không đúng.
! = Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu các giá trị không bằng nhau thì điều kiện trở thành true. (A! = B) là đúng.
> Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (A> B) là không đúng.
< Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (A <B) là đúng.
> = Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn hoặc bằng giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (A> = B) là không đúng.
<= Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn hoặc bằng giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (A <= B) là đúng.

Toán tử logic

Bảng sau đây cho thấy tất cả các toán tử logic được hỗ trợ bởi ngôn ngữ Tcl. Giả sử biếnA giữ 1 và biến B giữ 0, sau đó -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
&& Được gọi là toán tử logic AND. Nếu cả hai toán hạng đều khác 0, thì điều kiện trở thành true. (A && B) là sai.
|| Được gọi là Toán tử logic HOẶC. Nếu bất kỳ toán hạng nào trong hai toán hạng khác 0, thì điều kiện trở thành true. (A || B) là đúng.
! Được gọi là Toán tử logic NOT. Sử dụng để đảo ngược trạng thái logic của toán hạng của nó. Nếu một điều kiện là đúng thì toán tử logic NOT sẽ sai. ! (A && B) là đúng.

Toán tử Bitwise

Toán tử bitwise hoạt động trên các bit và thực hiện thao tác từng bit. Bảng sự thật cho &, |, và ^ như sau:

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

Giả sử nếu A = 60; và B = 13; bây giờ ở định dạng nhị phân, chúng sẽ như sau:

A = 0011 1100

B = 0000 1101

----------------------

A&B = 0000 1100

A | B = 0011 1101

A ^ B = 0011 0001

Các toán tử Bitwise được hỗ trợ bởi ngôn ngữ Tcl được liệt kê trong bảng sau. Giả sử biếnA giữ 60 và biến B giữ 13, sau đó -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
& Toán tử AND nhị phân sao chép một bit vào kết quả nếu nó tồn tại trong cả hai toán hạng. (A & B) sẽ cho 12, là 0000 1100
| Toán tử OR nhị phân sao chép một bit nếu nó tồn tại trong một trong hai toán hạng. (A | B) sẽ cho 61, là 0011 1101
^ Toán tử XOR nhị phân sao chép bit nếu nó được đặt trong một toán hạng nhưng không phải cả hai. (A ^ B) sẽ cho 49, là 0011 0001
<< Toán tử dịch chuyển trái nhị phân. Giá trị toán hạng bên trái được di chuyển sang trái bằng số bit được chỉ định bởi toán hạng bên phải. A << 2 sẽ cho 240, là 1111 0000
>> Toán tử Shift phải nhị phân. Giá trị của toán hạng bên trái được di chuyển sang phải bằng số bit được chỉ định bởi toán hạng bên phải. A >> 2 sẽ cho 15, là 0000 1111

Nhà khai thác bậc ba

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
? : Đệ tam Nếu Điều kiện là đúng? Sau đó giá trị X: Ngược lại giá trị Y

Quyền ưu tiên của nhà khai thác trong Tcl

Mức độ ưu tiên của toán tử xác định nhóm các từ trong một biểu thức. Điều này ảnh hưởng đến cách một biểu thức được đánh giá. Các toán tử nhất định có quyền ưu tiên cao hơn những toán tử khác; ví dụ, toán tử nhân có quyền ưu tiên cao hơn toán tử cộng.

For example: x = 7 + 3 * 2; ở đây, x được gán 13, không phải 20 vì toán tử * có mức độ ưu tiên cao hơn +, vì vậy đầu tiên nó được nhân với 3 * 2 và sau đó cộng thành 7.

Ở đây, các toán tử có mức độ ưu tiên cao nhất xuất hiện ở đầu bảng, những toán tử có mức độ ưu tiên thấp nhất xuất hiện ở cuối bảng. Trong một biểu thức, các toán tử có mức độ ưu tiên cao hơn sẽ được đánh giá đầu tiên.

Hiển thị các ví dụ

thể loại Nhà điều hành Sự liên kết
Một ngôi + - Phải sang trái
Phép nhân * /% Trái sang phải
Phụ gia + - Trái sang phải
Shift << >> Trái sang phải
Quan hệ <<=>> = Trái sang phải
Bitwise VÀ & Trái sang phải
Bitwise XOR ^ Trái sang phải
Bitwise HOẶC | Trái sang phải
Logic AND && Trái sang phải
Logic HOẶC || Trái sang phải
Đệ tam ?: Phải sang trái

Cấu trúc ra quyết định yêu cầu người lập trình chỉ định một hoặc nhiều điều kiện để được đánh giá hoặc kiểm tra bởi chương trình, cùng với một câu lệnh hoặc các câu lệnh sẽ được thực thi nếu điều kiện được xác định là đúng và tùy chọn, các câu lệnh khác sẽ được thực thi nếu điều kiện được xác định là sai.

Sau đây là dạng chung của cấu trúc ra quyết định điển hình được tìm thấy trong hầu hết các ngôn ngữ lập trình:

Ngôn ngữ Tcl sử dụng lệnh expr bên trong và do đó chúng ta không bắt buộc phải sử dụng lệnh expr một cách rõ ràng.

Ngôn ngữ Tcl cung cấp các loại câu lệnh ra quyết định sau:

Sr.No. Tuyên bố & Mô tả
1 câu lệnh if

Câu lệnh 'if' bao gồm một biểu thức Boolean theo sau là một hoặc nhiều câu lệnh.

2 câu lệnh if ... else

Câu lệnh 'if' có thể được theo sau bởi một câu lệnh 'else' tùy chọn, thực thi khi biểu thức Boolean sai.

3 câu lệnh if lồng nhau

Bạn có thể sử dụng một câu lệnh 'if' hoặc 'else if' bên trong (các) câu lệnh 'if' hoặc 'else if' khác.

4 chuyển đổi tuyên bố

A switch câu lệnh cho phép một biến được kiểm tra tính bình đẳng với một danh sách các giá trị.

5 các câu lệnh chuyển đổi lồng nhau

Bạn có thể sử dụng một switch tuyên bố bên trong khác switch các câu lệnh).

Các ? : Nhà điều hành

Chúng tôi đã bảo hiểm conditional operator ? : trong chương trước, có thể được sử dụng để thay thế if...elsecác câu lệnh. Nó có dạng chung sau:

Exp1 ? Exp2 : Exp3;

Trong đó Exp1, Exp2 và Exp3 là các biểu thức. Chú ý công dụng và vị trí của dấu hai chấm.

Giá trị của a '? biểu thức 'được xác định như thế này: Exp1 được đánh giá. Nếu nó đúng, thì Exp2 được đánh giá và trở thành giá trị của toàn bộ '? biểu hiện.' Nếu Exp1 là false, thì Exp3 được đánh giá và giá trị của nó trở thành giá trị của biểu thức. Một ví dụ đã được biểu diễn ở dưới.

#!/usr/bin/tclsh

set a 10;
set b [expr $a == 1 ? 20: 30] puts "Value of b is $b\n"
set b [expr $a == 10 ? 20: 30] puts "Value of b is $b\n"

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Value of b is 30
Value of b is 20

Có thể có một tình huống, trong đó bạn cần thực thi một khối mã nhiều lần. Nói chung, các câu lệnh được thực hiện tuần tự: Câu lệnh đầu tiên trong một hàm được thực hiện đầu tiên, tiếp theo là câu lệnh thứ hai, v.v.

Các ngôn ngữ lập trình cung cấp các cấu trúc điều khiển khác nhau cho phép các đường dẫn thực thi phức tạp hơn.

Câu lệnh lặp cho phép chúng ta thực hiện một câu lệnh hoặc một nhóm câu lệnh nhiều lần và sau đây là dạng chung của câu lệnh lặp trong hầu hết các ngôn ngữ lập trình:

Ngôn ngữ Tcl cung cấp các loại vòng lặp sau để xử lý các yêu cầu về lặp.

Sr.No. Loại vòng lặp & Mô tả
1 trong khi lặp lại

Lặp lại một câu lệnh hoặc một nhóm câu lệnh trong khi một điều kiện đã cho là đúng. Nó kiểm tra điều kiện trước khi thực thi phần thân của vòng lặp.

2 vòng lặp for

Thực thi một chuỗi các câu lệnh nhiều lần và viết tắt mã quản lý biến vòng lặp.

3 vòng lồng nhau

Bạn có thể sử dụng một hoặc nhiều vòng lặp bên trong bất kỳ vòng lặp while, for hoặc do.. while nào khác.

Tuyên bố kiểm soát vòng lặp

Các câu lệnh điều khiển vòng lặp thay đổi việc thực thi từ trình tự bình thường của nó. Khi việc thực thi rời khỏi một phạm vi, tất cả các đối tượng tự động được tạo trong phạm vi đó sẽ bị phá hủy.

Tcl hỗ trợ các câu lệnh điều khiển sau.

Sr.No. Tuyên bố & Mô tả Kiểm soát
1 tuyên bố ngắt

Kết thúc vòng lặp hoặc câu lệnh switch và chuyển việc thực thi sang câu lệnh ngay sau vòng lặp hoặc lệnh switch.

2 tiếp tục tuyên bố

Làm cho vòng lặp bỏ qua phần còn lại của phần thân và ngay lập tức kiểm tra lại tình trạng của nó trước khi nhắc lại.

Vòng lặp vô hạn

Một vòng lặp trở thành vòng lặp vô hạn nếu một điều kiện không bao giờ trở thành sai. Cácwhilevòng lặp thường được sử dụng cho mục đích này. Bạn có thể tạo một vòng lặp vô tận bằng cách để biểu thức điều kiện là 1.

while {1} {
   puts "This loop will run forever."
}

Khi biểu thức điều kiện vắng mặt, nó được giả định là đúng. Các lập trình viên tcl thường sử dụng cấu trúc while {1} để biểu thị một vòng lặp vô hạn.

NOTE - Bạn có thể kết thúc một vòng lặp vô hạn bằng cách nhấn các phím Ctrl + C.

Mảng là sự sắp xếp có hệ thống của một nhóm các phần tử sử dụng các chỉ số. Cú pháp cho mảng thông thường được hiển thị bên dưới.

set ArrayName(Index) value

Dưới đây là một ví dụ để tạo mảng đơn giản.

#!/usr/bin/tclsh

set languages(0) Tcl
set languages(1) "C Language"
puts $languages(0) puts $languages(1)

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Tcl
C Language

Kích thước của mảng

Cú pháp để tính toán mảng kích thước được hiển thị bên dưới.

[array size variablename]

Ví dụ về kích thước in được hiển thị bên dưới.

#!/usr/bin/tclsh

set languages(0) Tcl
set languages(1) "C Language"
puts  [array size languages]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

2

Lặp lại mảng

Mặc dù vậy, chỉ số mảng có thể không liên tục giống như các giá trị được chỉ định cho chỉ mục 1 rồi đến chỉ mục 10, v.v. Nhưng, trong trường hợp chúng liên tục, chúng ta có thể sử dụng phép lặp mảng để truy cập các phần tử của mảng. Một phép lặp mảng đơn giản để in các phần tử của mảng được hiển thị bên dưới.

#!/usr/bin/tclsh

set languages(0) Tcl
set languages(1) "C Language"
for { set index 0 }  { $index < [array size languages] } { incr index } { puts "languages($index) : $languages($index)"
}

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

languages(0) : Tcl
languages(1) : C Language

Mảng liên kết

Trong Tcl, tất cả các mảng về bản chất là liên kết. Mảng được lưu trữ và truy xuất mà không có bất kỳ thứ tự cụ thể nào. Mảng liên kết có chỉ mục không nhất thiết phải là một số và có thể được điền thưa thớt. Dưới đây là một ví dụ đơn giản cho mảng kết hợp với các chỉ số không phải là số.

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
puts  $personA(Name) puts $personA(Age)

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Dave
14

Các chỉ số của mảng

Cú pháp để lấy các chỉ số của mảng được hiển thị bên dưới.

[array names variablename]

Ví dụ về kích thước in được hiển thị bên dưới.

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
puts [array names personA]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Age Name

Lặp lại mảng liên kết

Bạn có thể sử dụng các chỉ số của mảng để lặp qua mảng kết hợp. Một ví dụ đã được biểu diễn ở dưới.

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
foreach index [array names personA] {
   puts "personA($index): $personA($index)"
}

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

personA(Age): 14
personA(Name): Dave

Kiểu dữ liệu ban đầu của Tcl là chuỗi và thường chúng ta có thể tìm thấy dấu ngoặc kép trên Tcl dưới dạng ngôn ngữ chỉ chuỗi. Các chuỗi này có thể chứa ký tự chữ và số, chỉ số, Boolean hoặc thậm chí dữ liệu nhị phân. Tcl sử dụng các ký tự unicode 16 bit và các ký tự chữ và số có thể chứa các chữ cái bao gồm các ký tự không phải là ký tự Latinh, số hoặc dấu chấm câu.

Giá trị boolean có thể được biểu diễn bằng 1, có hoặc đúng đối với đúng và 0, không hoặc sai đối với sai.

Biểu diễn chuỗi

Không giống như các ngôn ngữ khác, trong Tcl, bạn không cần bao gồm dấu ngoặc kép khi nó chỉ là một từ duy nhất. Một ví dụ có thể là -

#!/usr/bin/tclsh

set myVariable hello
puts $myVariable

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

hello

Khi muốn biểu diễn nhiều chuỗi, chúng ta có thể sử dụng dấu ngoặc kép hoặc dấu ngoặc nhọn. Nó được hiển thị bên dưới -

#!/usr/bin/tclsh

set myVariable "hello world"
puts $myVariable set myVariable {hello world} puts $myVariable

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

hello world
hello world

Chuỗi thoát chuỗi

Một chữ ký tự có thể là một ký tự thuần túy (ví dụ: 'x'), một chuỗi thoát (ví dụ: '\ t') hoặc một ký tự phổ quát (ví dụ: '\ u02C0').

Có một số ký tự trong Tcl khi chúng đứng trước dấu gạch chéo ngược thì chúng sẽ có ý nghĩa đặc biệt và chúng được sử dụng để biểu thị như dòng mới (\ n) hoặc tab (\ t). Tại đây, bạn có danh sách một số mã trình tự thoát như vậy -

Trình tự thoát Ý nghĩa
\\ \ tính cách
\ ' ' tính cách
\ " " tính cách
\? ? tính cách
\ a Cảnh báo hoặc chuông
\ b Backspace
\ f Thức ăn dạng
\ n Dòng mới
\ r Vận chuyển trở lại
\ t Tab ngang
\ v Tab dọc

Sau đây là ví dụ để hiển thị một vài ký tự thoát -

#!/usr/bin/tclsh

puts "Hello\tWorld\n\nTutorialspoint";

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Hello   World

Tutorialspoint

Lệnh chuỗi

Danh sách các lệnh con cho lệnh chuỗi được liệt kê trong bảng sau:

Sr.No. Phương pháp & Mô tả
1

compare string1 string2

So sánh chuỗi1 và chuỗi2 từ vựng. Trả về 0 nếu bằng nhau, -1 nếu string1 đứng trước string2, khác 1.

2

first string1 string2

Trả về chỉ số xuất hiện đầu tiên của string1 trong string2. Nếu không tìm thấy, trả về -1.

3

index chỉ số chuỗi

Trả về ký tự tại chỉ mục.

4

last string1 string2

Trả về chỉ số lần xuất hiện cuối cùng của string1 trong string2. Nếu không tìm thấy, trả về -1.

5

length chuỗi

Trả về độ dài của chuỗi.

6

match pattern chuỗi

Trả về 1 nếu chuỗi khớp với mẫu.

7

range string index1 index2

Trả về phạm vi ký tự trong chuỗi từ index1 đến index2.

số 8

tolower chuỗi

Trả về chuỗi chữ thường.

9

toupper chuỗi

Trả về chuỗi chữ hoa.

10

trim chuỗi ký tự?

Loại bỏ các ký tự cắt ở cả hai đầu của chuỗi. Các ký tự cắt mặc định là khoảng trắng.

11

trimleft chuỗi ký tự?

Loại bỏ các ký tự cắt ở đầu bên trái của chuỗi. Các ký tự cắt mặc định là khoảng trắng.

12

trimright chuỗi ký tự?

Loại bỏ các ký tự cắt ở đầu bên trái của chuỗi. Các ký tự cắt mặc định là khoảng trắng.

13

wordend chỉ mục dây tìm kiếm

Trả về chỉ mục trong chuỗi tìm ký tự sau từ chứa ký tự tại chỉ mục.

14

wordstart chỉ mục dây tìm kiếm

Trả về chỉ mục trong chuỗi tìm ký tự đầu tiên trong từ chứa ký tự tại chỉ mục.

Dưới đây là ví dụ về một số lệnh con chuỗi Tcl thường được sử dụng.

So sánh chuỗi

#!/usr/bin/tclsh

set s1 "Hello"
set s2 "World"
set s3 "World"
puts [string compare $s1 $s2]
if {[string compare $s2 $s3] == 0} {
   puts "String \'s1\' and \'s2\' are same.";
}

if {[string compare $s1 $s2] == -1} {
   puts "String \'s1\' comes before \'s2\'.";
}

if {[string compare $s2 $s1] == 1} {
   puts "String \'s2\' comes after \'s1\'.";
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

-1
String 's1' and 's2' are same.
String 's1' comes before 's2'.
String 's2' comes after 's1'.

Chỉ mục của chuỗi

#!/usr/bin/tclsh

set s1 "Hello World"
set s2 "o"
puts "First occurrence of $s2 in s1" puts [string first $s2 $s1] puts "Character at index 0 in s1" puts [string index $s1 0]
puts "Last occurrence of $s2 in s1" puts [string last $s2 $s1] puts "Word end index in s1" puts [string wordend $s1 20]
puts "Word start index in s1"
puts [string wordstart $s1 20]

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

First occurrence of o in s1
4
Character at index 0 in s1
H
Last occurrence of o in s1
7
Word end index in s1
11
Word start index in s1
6

Chiều dài của chuỗi

#!/usr/bin/tclsh

set s1 "Hello World"
puts "Length of string s1"
puts [string length $s1]

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Length of string s1
11

Xử lý các trường hợp

#!/usr/bin/tclsh

set s1 "Hello World"
puts "Uppercase string of s1"
puts [string toupper $s1] puts "Lowercase string of s1" puts [string tolower $s1]

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Uppercase string of s1
HELLO WORLD
Lowercase string of s1
hello world

Nhân vật cắt tỉa

#!/usr/bin/tclsh

set s1 "Hello World"
set s2 "World"
puts "Trim right $s2 in $s1"
puts [string trimright $s1 $s2]

set s2 "Hello"
puts "Trim left $s2 in $s1"
puts [string trimleft $s1 $s2]

set s1 " Hello World "
set s2 " "
puts "Trim characters s1 on both sides of s2"
puts [string trim $s1 $s2]

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Trim right World in Hello World
Hello 
Trim left Hello in Hello World
 World
Trim characters s1 on both sides of s2
Hello World

Các chuỗi khớp

#!/usr/bin/tclsh

set s1 "[email protected]" 
set s2 "*@*.com"
puts "Matching pattern s2 in s1"
puts [string match "*@*.com" $s1 ] puts "Matching pattern tcl in s1" puts [string match {tcl} $s1]

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Matching pattern s2 in s1
1
Matching pattern tcl in s1
0

Nối lệnh

#!/usr/bin/tclsh

set s1 "Hello" 
append s1 " World"
puts $s1

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Hello World

Lệnh định dạng

Bảng sau đây cho thấy danh sách các định dạng có sẵn trong Tcl:

Bộ định danh Sử dụng
%S Biểu diễn chuỗi
% d Biểu diễn số nguyên
% f Biểu diễn dấu chấm động
% e Biểu diễn dấu phẩy động với dạng số mũ định trị
% x Biểu diễn thập lục phân

Một số ví dụ đơn giản được đưa ra dưới đây:

#!/usr/bin/tclsh

puts [format "%f" 43.5]
puts [format "%e" 43.5]
puts [format "%d %s" 4 tuts]
puts [format "%s" "Tcl Language"]
puts [format "%x" 40]

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

43.500000
4.350000e+01
4 tuts
Tcl Language
28

Lệnh quét

Lệnh quét được sử dụng để phân tích cú pháp một chuỗi dựa trên mã định dạng. Một số ví dụ được hiển thị bên dưới.

#!/usr/bin/tclsh

puts [scan "90" {%[0-9]} m]
puts [scan "abc" {%[a-z]} m]
puts [scan "abc" {%[A-Z]} m]
puts [scan "ABC" {%[A-Z]} m]

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

1
1
0
1

Danh sách là một trong những kiểu dữ liệu cơ bản có sẵn trong Tcl. Nó được sử dụng để đại diện cho một bộ sưu tập các mặt hàng có thứ tự. Nó có thể bao gồm các loại mục khác nhau trong cùng một danh sách. Hơn nữa, một danh sách có thể chứa một danh sách khác.

Một điều quan trọng cần lưu ý là các danh sách này được biểu diễn dưới dạng chuỗi hoàn toàn và được xử lý để tạo thành các mục riêng lẻ khi được yêu cầu. Vì vậy, hãy tránh những danh sách lớn và trong những trường hợp như vậy; sử dụng mảng.

Tạo danh sách

Cú pháp chung cho danh sách được đưa ra dưới đây:

set listName { item1 item2 item3 .. itemn }
# or
set listName [list item1 item2 item3]
# or 
set listName [split "items separated by a character" split_character]

Một số ví dụ được đưa ra dưới đây -

#!/usr/bin/tclsh

set colorList1 {red green blue}
set colorList2 [list red green blue]
set colorList3 [split "red_green_blue" _]
puts $colorList1
puts $colorList2 puts $colorList3

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

red green blue
red green blue
red green blue

Nối mục vào danh sách

Cú pháp để thêm mục vào danh sách được đưa ra dưới đây:

append listName split_character value
# or
lappend listName value

Một số ví dụ được đưa ra dưới đây -

#!/usr/bin/tclsh

set var orange
append var " " "blue"
lappend var "red" 
lappend var "green" 
puts $var

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

orange blue red green

Độ dài của danh sách

Cú pháp cho độ dài của danh sách được đưa ra dưới đây:

llength listName

Ví dụ về độ dài của danh sách được đưa ra dưới đây:

#!/usr/bin/tclsh

set var {orange blue red green}
puts [llength $var]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

4

Liệt kê Mục tại Chỉ mục

Cú pháp để chọn mục danh sách tại chỉ mục cụ thể được đưa ra dưới đây:

lindex listname index

Ví dụ cho mục danh sách tại chỉ mục được đưa ra dưới đây:

#!/usr/bin/tclsh

set var {orange blue red green}
puts [lindex $var  1]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

blue

Chèn mục vào chỉ mục

Cú pháp để chèn các mục danh sách tại chỉ mục cụ thể được đưa ra dưới đây.

linsert listname index value1 value2..valuen

Ví dụ để chèn mục danh sách tại chỉ mục cụ thể được đưa ra dưới đây.

#!/usr/bin/tclsh

set var {orange blue red green}
set var [linsert  $var 3 black white]
puts $var

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

orange blue red black white green

Thay thế các mục tại chỉ số

Cú pháp để thay thế các mục danh sách tại các chỉ mục cụ thể được đưa ra dưới đây:

lreplace listname firstindex lastindex value1 value2..valuen

Ví dụ để thay thế các mục danh sách tại các chỉ mục cụ thể được đưa ra dưới đây.

#!/usr/bin/tclsh

set var {orange blue red green}
set var [lreplace $var 2 3 black white]
puts $var

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

orange blue black white

Đặt mục tại chỉ mục

Cú pháp để thiết lập mục danh sách tại chỉ mục cụ thể được đưa ra dưới đây:

lset listname index value

Ví dụ để thiết lập mục danh sách tại chỉ mục cụ thể được đưa ra dưới đây:

#!/usr/bin/tclsh

set var {orange blue red green}
lset var 0 black 
puts $var

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

black blue red green

Chuyển đổi danh sách thành các biến

Cú pháp để sao chép giá trị vào biến được đưa ra dưới đây:

lassign listname variable1 variable2.. variablen

Ví dụ để chuyển đổi danh sách thành các biến được đưa ra dưới đây:

#!/usr/bin/tclsh

set var {orange blue red green}
lassign $var colour1 colour2 puts $colour1
puts $colour2

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

orange
blue

Sắp xếp danh sách

Cú pháp sắp xếp danh sách được đưa ra dưới đây:

lsort listname

Dưới đây là một ví dụ để sắp xếp danh sách:

#!/usr/bin/tclsh

set var {orange blue red green}
set var [lsort $var]
puts $var

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

blue green orange red

Từ điển là một sự sắp xếp để ánh xạ các giá trị thành các khóa. Cú pháp cho từ điển thông thường được hiển thị bên dưới:

dict set dictname key value
# or 
dict create dictname key1 value1 key2 value2 .. keyn valuen

Dưới đây là một số ví dụ để tạo từ điển -

#!/usr/bin/tclsh

dict set colours  colour1 red 
puts $colours
dict set colours  colour2 green
puts $colours set colours [dict create colour1 "black" colour2 "white"] puts $colours

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

colour1 red
colour1 red colour2 green
colour1 black colour2 white

Kích thước của Dict

Cú pháp để nhận kích thước của dict được hiển thị bên dưới:

[dict size dictname]

Ví dụ về kích thước in được hiển thị bên dưới:

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
puts [dict size $colours]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

2

Lặp lại từ điển

Một phép lặp từ điển đơn giản để in các khóa và giá trị của từ điển được hiển thị bên dưới:

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
foreach item [dict keys $colours] {
   set value [dict get $colours $item]
   puts $value
}

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

black
white

Giá trị cho Key in Dict

Cú pháp để truy xuất giá trị cho khóa trong dict được hiển thị bên dưới:

[dict get $dictname $keyname]

Dưới đây là một ví dụ để lấy giá trị cho khóa:

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
set value [dict get $colours colour1]
puts $value

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

black

Tất cả các phím trong Dict

Cú pháp để truy xuất tất cả các khóa trong dict được hiển thị bên dưới:

[dict keys $dictname]

Dưới đây là một ví dụ để in tất cả các phím:

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
set keys [dict keys $colours] puts $keys

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

colour1 colour2

Tất cả các giá trị bằng chính xác

Cú pháp để lấy tất cả các giá trị trong dict được hiển thị bên dưới:

[dict values $dictname]

Dưới đây là một ví dụ để in tất cả các giá trị:

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
set values [dict values $colours]
puts $values

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

black white

Key Tồn tại trong Dict

Cú pháp để kiểm tra xem khóa có tồn tại trong dict được hiển thị dưới đây không:

[dict exists $dictname $key]

Dưới đây là một ví dụ để kiểm tra xem khóa có tồn tại trong dict hay không:

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
set result [dict exists $colours colour1]
puts $result

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

1

Các thủ tục không là gì ngoài các khối mã với một loạt lệnh cung cấp một chức năng có thể sử dụng lại cụ thể. Nó được sử dụng để tránh lặp lại cùng một mã ở nhiều vị trí. Các thủ tục tương đương với các hàm được sử dụng trong nhiều ngôn ngữ lập trình và được tạo sẵn trong Tcl với sự trợ giúp củaproc chỉ huy.

Cú pháp tạo một thủ tục đơn giản được hiển thị bên dưới:

proc procedureName {arguments} {
   body
}

Dưới đây là một ví dụ đơn giản cho quy trình:

#!/usr/bin/tclsh

proc helloWorld {} {
   puts "Hello, World!"
}
helloWorld

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Hello, World!

Thủ tục với nhiều đối số

Dưới đây là một ví dụ về thủ tục với các đối số:

#!/usr/bin/tclsh

proc add {a b} {
   return [expr $a+$b]
}
puts [add 10 30]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

40

Thủ tục với các đối số có thể thay đổi

Dưới đây là một ví dụ về thủ tục với các đối số:

#!/usr/bin/tclsh

proc avg {numbers} {
   set sum 0
   foreach number $numbers {
      set sum  [expr $sum + $number]
   }
   set average [expr $sum/[llength $numbers]]
   return $average
}
puts [avg {70 80 50 60}]
puts [avg {70 80 50 }]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

65
66

Thủ tục với các đối số mặc định

Các đối số mặc định được sử dụng để cung cấp các giá trị mặc định có thể được sử dụng nếu không có giá trị nào được cung cấp. Dưới đây là một ví dụ về thủ tục có đối số mặc định, đôi khi được gọi là đối số ngầm định:

#!/usr/bin/tclsh

proc add {a {b 100} } {
   return [expr $a+$b]
}
puts [add 10 30]
puts [add 10]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

40
110

Thủ tục đệ quy

Ví dụ cho các thủ tục đệ quy được hiển thị bên dưới:

#!/usr/bin/tclsh

proc factorial {number} {
   if {$number <= 1} {
      return 1
   } 
   return [expr $number * [factorial [expr $number - 1]]]

}
puts [factorial 3]
puts [factorial 5]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

6
120

Các gói được sử dụng để tạo các đơn vị mã có thể tái sử dụng. Một gói bao gồm một tập hợp các tệp cung cấp chức năng cụ thể. Tập hợp các tệp này được xác định bằng một tên gói và có thể có nhiều phiên bản của cùng một tệp. Gói có thể là một tập hợp các tập lệnh Tcl, thư viện nhị phân hoặc kết hợp cả hai.

Gói sử dụng khái niệm không gian tên để tránh xung đột của tên biến và tên thủ tục. Kiểm tra thêm trong hướng dẫn ' không gian tên ' tiếp theo của chúng tôi .

Tạo gói

Một gói có thể được tạo với sự trợ giúp của tối thiểu hai tệp. Một tệp chứa mã gói. Tệp khác chứa tệp gói chỉ mục để khai báo gói của bạn.

Dưới đây là danh sách các bước để tạo và sử dụng gói.

BƯỚC 1: Tạo mã

Tạo mã cho gói bên trong thư mục HelloWorld. Đặt tên tệp là HelloWorld.tcl với mã như hình dưới đây -

# /Users/rajkumar/Desktop/helloworld/HelloWorld.tcl 
# Create the namespace
namespace eval ::HelloWorld {
 
  # Export MyProcedure
  namespace export MyProcedure
 
  # My Variables
   set version 1.0
   set MyDescription "HelloWorld"
 
  # Variable for the path of the script
   variable home [file join [pwd] [file dirname [info script]]]
 
}
 
# Definition of the procedure MyProcedure
proc ::HelloWorld::MyProcedure {} {
   puts $HelloWorld::MyDescription } package provide HelloWorld $HelloWorld::version
package require Tcl 8.0

BƯỚC 2: Tạo chỉ mục gói

Mở tclsh. Chuyển sang thư mục HelloWorld và sử dụng lệnh pkg_mkIndex để tạo tệp chỉ mục như hình dưới đây:

% cd /Users/rajkumar/Desktop/helloworld 
% pkg_mkIndex . *.tcl

BƯỚC 3: Thêm thư mục vào đường dẫn tự động

Sử dụng lệnh lappend để thêm gói vào danh sách chung như hình dưới đây:

% lappend auto_path "/Users/rajkumar/Desktop/helloworld"

BƯỚC 4: Thêm gói

Tiếp theo thêm gói vào chương trình bằng cách sử dụng câu lệnh package request như hình dưới đây -

% package require HelloWorld 1.0

BƯỚC 5: Thủ tục mời

Bây giờ, mọi thứ đang được thiết lập, chúng ta có thể gọi thủ tục của mình như hình dưới đây -

% puts [HelloWorld::MyProcedure]

Bạn sẽ nhận được kết quả sau:

HelloWorld

Hai bước đầu tiên tạo gói. Sau khi gói được tạo, bạn có thể sử dụng nó trong bất kỳ tệp Tcl nào bằng cách thêm ba câu lệnh cuối cùng như hình dưới đây:

lappend auto_path "/Users/rajkumar/Desktop/helloworld"
package require HelloWorld 1.0
puts [HelloWorld::MyProcedure]

Bạn sẽ nhận được kết quả sau:

HelloWorld

Không gian tên là một vùng chứa tập hợp các số nhận dạng được sử dụng để nhóm các biến và thủ tục. Không gian tên có sẵn từ phiên bản Tcl 8.0. Trước khi giới thiệu các không gian tên, có một phạm vi toàn cầu duy nhất. Bây giờ với không gian tên, chúng ta có các phân vùng bổ sung có phạm vi toàn cầu.

Tạo không gian tên

Không gian tên được tạo bằng cách sử dụng namespacechỉ huy. Dưới đây là một ví dụ đơn giản để tạo không gian tên:

#!/usr/bin/tclsh

namespace eval MyMath {
  # Create a variable inside the namespace
  variable myResult
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
  set ::MyMath::myResult [expr $a + $b]
}
MyMath::Add 10 23

puts $::MyMath::myResult

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

33

Trong chương trình trên, bạn có thể thấy có một không gian tên với một biến myResult và một thủ tục Add. Điều này giúp bạn có thể tạo các biến và thủ tục có cùng tên dưới các không gian tên khác nhau.

Không gian tên lồng nhau

Tcl cho phép lồng các không gian tên. Dưới đây là một ví dụ đơn giản về lồng ghép các không gian tên:

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
}

namespace eval extendedMath {
   # Create a variable inside the namespace
   namespace eval MyMath {
      # Create a variable inside the namespace
      variable myResult
   }
}
set ::MyMath::myResult "test1"
puts $::MyMath::myResult
set ::extendedMath::MyMath::myResult "test2"
puts $::extendedMath::MyMath::myResult

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

test1
test2

Nhập và Xuất không gian tên

Bạn có thể thấy trong các ví dụ về không gian tên trước đó, chúng tôi sử dụng rất nhiều toán tử phân giải phạm vi và nó phức tạp hơn để sử dụng. Chúng ta có thể tránh điều này bằng cách nhập và xuất không gian tên. Dưới đây là một ví dụ:

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
   namespace export Add
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
   return [expr $a + $b]
}

namespace import MyMath::*
puts [Add 10 30]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

40

Quên không gian tên

Bạn có thể xóa vùng tên đã nhập bằng cách sử dụng forgetlệnh phụ. Một ví dụ đơn giản được hiển thị bên dưới:

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
   namespace export Add
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
   return [expr $a + $b]
}
namespace import MyMath::*
puts [Add 10 30]
namespace forget MyMath::*

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

40

Tcl hỗ trợ xử lý tệp với sự trợ giúp của các lệnh tích hợp mở, đọc, đặt, nhận và đóng.

Tệp đại diện cho một chuỗi các byte, không quan trọng đó là tệp văn bản hay tệp nhị phân.

Mở tệp

Tcl sử dụng lệnh mở để mở tệp trong Tcl. Cú pháp để mở một tệp như sau:

open fileName accessMode

Đây, filename là chuỗi ký tự, bạn sẽ sử dụng để đặt tên tệp của mình và accessMode có thể có một trong các giá trị sau:

Sr.No. Chế độ & Mô tả
1

r

Mở tệp văn bản hiện có cho mục đích đọc và tệp phải tồn tại. Đây là chế độ mặc định được sử dụng khi không có accessMode nào được chỉ định.

2

w

Mở một tệp văn bản để ghi, nếu nó không tồn tại, thì một tệp mới sẽ được tạo, nếu không tệp hiện có sẽ bị cắt bớt.

3

a

Mở tệp văn bản để viết ở chế độ bổ sung và tệp phải tồn tại. Tại đây, chương trình của bạn sẽ bắt đầu thêm nội dung vào nội dung tệp hiện có.

4

r+

Mở tệp văn bản để đọc và ghi cả hai. Tệp phải tồn tại.

5

w+

Mở tệp văn bản để đọc và ghi cả hai. Đầu tiên nó cắt ngắn tệp thành độ dài bằng 0 nếu nó tồn tại, nếu không, hãy tạo tệp nếu nó không tồn tại.

6

a+

Mở tệp văn bản để đọc và ghi cả hai. Nó tạo ra tệp nếu nó không tồn tại. Việc đọc sẽ bắt đầu lại từ đầu, nhưng phần viết chỉ có thể được thêm vào.

Đóng tệp

Để đóng tệp, hãy sử dụng lệnh đóng. Cú pháp cho lệnh đóng như sau:

close fileName

Bất kỳ tệp nào đã được mở bởi một chương trình phải được đóng khi chương trình kết thúc việc sử dụng tệp đó. Trong hầu hết các trường hợp, các tệp không cần phải được đóng một cách rõ ràng; chúng được đóng tự động khi các đối tượng Tệp tự động kết thúc.

Viết tệp

Lệnh Puts được sử dụng để ghi vào một tệp đang mở.

puts $filename "text to write"

Dưới đây là một ví dụ đơn giản để ghi vào tệp.

#!/usr/bin/tclsh

set fp [open "input.txt" w+]
puts $fp "test" close $fp

Khi đoạn mã trên được biên dịch và thực thi, nó sẽ tạo ra một tệp mới input.txt trong thư mục mà nó đã được khởi động (trong thư mục làm việc của chương trình).

Đọc tệp

Sau đây là lệnh đơn giản để đọc từ một tệp:

set file_data [read $fp]

Dưới đây là một ví dụ đầy đủ về đọc và ghi:

#!/usr/bin/tclsh

set fp [open "input.txt" w+]
puts $fp "test"
close $fp set fp [open "input.txt" r] set file_data [read $fp]
puts $file_data close $fp

Khi đoạn mã trên được biên dịch và thực thi, nó sẽ đọc tệp được tạo trong phần trước và tạo ra kết quả sau:

test

Đây là một ví dụ khác để đọc tệp cho đến khi kết thúc từng dòng của tệp -

#!/usr/bin/tclsh

set fp [open "input.txt" w+]
puts $fp "test\ntest" close $fp
set fp [open "input.txt" r]

while { [gets $fp data] >= 0 } { puts $data
}
close $fp

Khi đoạn mã trên được biên dịch và thực thi, nó sẽ đọc tệp được tạo trong phần trước và tạo ra kết quả sau:

test
test

Xử lý lỗi trong Tcl được cung cấp với sự trợ giúp của errorcatchcác lệnh. Cú pháp cho mỗi lệnh này được hiển thị bên dưới.

Cú pháp lỗi

error message info code

Trong cú pháp lệnh lỗi ở trên, thông báo là thông báo lỗi, thông tin được đặt trong errorInfo biến toàn cục và mã được đặt trong errorCode biến toàn cục.

Bắt cú pháp

catch script resultVarName

Trong cú pháp lệnh catch ở trên, script là đoạn mã được thực thi, resultVarName là biến lưu giữ lỗi hoặc kết quả. Lệnh catch trả về 0 nếu không có lỗi và 1 nếu có lỗi.

Dưới đây là một ví dụ để xử lý lỗi đơn giản:

#!/usr/bin/tclsh

proc Div {a b} {
   if {$b == 0} {
      error "Error generated by error" "Info String for error" 401
   } else {
      return [expr $a/$b]
   }
}

if {[catch {puts "Result = [Div 10 0]"} errmsg]} {
   puts "ErrorMsg: $errmsg" puts "ErrorCode: $errorCode"
   puts "ErrorInfo:\n$errorInfo\n" } if {[catch {puts "Result = [Div 10 2]"} errmsg]} { puts "ErrorMsg: $errmsg"
   puts "ErrorCode: $errorCode" puts "ErrorInfo:\n$errorInfo\n"
}

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

ErrorMsg: Error generated by error
ErrorCode: 401
ErrorInfo:
Info String for error
   (procedure "Div" line 1)
   invoked from within
"Div 10 0"

Result = 5

Như bạn có thể thấy trong ví dụ trên, chúng ta có thể tạo thông báo lỗi tùy chỉnh của riêng mình. Tương tự, có thể bắt lỗi do Tcl tạo ra. Một ví dụ được hiển thị bên dưới -

#!/usr/bin/tclsh

catch {set file [open myNonexistingfile.txt]} result
puts "ErrorMsg: $result" puts "ErrorCode: $errorCode"
puts "ErrorInfo:\n$errorInfo\n"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

ErrorMsg: couldn't open "myNonexistingfile.txt": no such file or directory
ErrorCode: POSIX ENOENT {no such file or directory}
ErrorInfo:
couldn't open "myNonexistingfile.txt": no such file or directory
   while executing
"open myNonexistingfile.txt"

Tcl cung cấp một số hàm (thủ tục) cài sẵn cho các hoạt động khác nhau. Điều này bao gồm -

  • Các chức năng xử lý danh sách .

  • Các hàm xử lý chuỗi .

  • Các hàm xử lý mảng .

  • Các chức năng xử lý từ điển .

  • Các chức năng xử lý Tệp I / O.

  • Chức năng tạo không gian tên và gói.

  • Các hàm cho phép toán.

  • Các chức năng cho hoạt động của Hệ thống.

Mỗi điều ở trên ngoại trừ hàm toán học và hệ thống được đề cập trong các chương trước. Các hàm tích hợp trong toán học và hệ thống được giải thích bên dưới.

Các hàm toán học

Các hàm toán học có sẵn trong Tcl được liệt kê trong bảng sau:

Sr.No. Phương pháp & Mô tả
1

abs tranh luận

Tính giá trị tuyệt đối của arg.

2

acos tranh luận

Tính arccosine của arg.

3

asin tranh luận

Tính arcsine của arg.

4

atan tranh luận

Tính arctang của đối số.

5

atan2 yx

Tính toán arctang của thương của các đối số của nó (y / x).

6

ceil tranh luận

Tính số nguyên nhỏ nhất lớn hơn hoặc bằng một số.

7

cos tranh luận

Tính cosin của arg.

số 8

cosh tranh luận

Tính cosin hyperbolic của arg.

9

double tranh luận

Tính toán nếu arg là một giá trị dấu phẩy động, trả về arg, nếu không thì chuyển đổi arg thành dấu phẩy động và trả về giá trị đã chuyển đổi.

10

exp tranh luận

Tính toán một hàm số mũ (e được nâng lên thành lũy thừa của arg).

11

floor tranh luận

Tính số nguyên lớn nhất nhỏ hơn hoặc bằng arg.

12

fmod xy

Tính phần dư dấu phẩy động của phép chia x cho y. Nếu y là 0, một lỗi sẽ được trả về.

13

hypot xy

Tính độ dài cạnh huyền của tam giác vuông sqrt (x * x + y * y).

14

int tranh luận

Tính toán nếu arg là một giá trị nguyên có cùng độ rộng với từ máy, trả về arg, nếu không thì chuyển đổi arg thành một số nguyên.

15

log tranh luận

Tính logarit tự nhiên của arg.

16

log10 tranh luận

Tính logarit cơ số 10 của arg.

17

pow xy

Tính giá trị của x được nâng lên lũy thừa y. Nếu x âm thì y phải là một giá trị nguyên.

18

rand

Tính toán một số giả ngẫu nhiên từ 0 đến 1.

19

round tranh luận

Tính giá trị của arg làm tròn đến số nguyên gần nhất.

20

sin tranh luận

Tính sin của arg.

21

sinh tranh luận

Tính sin hypebol của arg.

22

sqrt tranh luận

Tính căn bậc hai của arg. arg phải tích cực.

23

srand tranh luận

Tính toán một số giả ngẫu nhiên từ 0 đến 1. Đối số, phải là một số nguyên, được sử dụng để đặt lại hạt giống cho trình tạo số ngẫu nhiên của rand.

24

tan tranh luận

Tính tiếp tuyến của arg.

25

tanh tranh luận

Tính tiếp tuyến hyperbol của arg.

26

wide tranh luận

Tính toán giá trị số nguyên có chiều rộng ít nhất là 64 bit (bằng cách mở rộng dấu nếu arg là một số 32 bit) cho arg nếu nó chưa phải là một.

Dưới đây là một số ví dụ sử dụng các hàm toán học:

#!/usr/bin/tclsh

namespace import ::tcl::mathfunc::*
puts [tan 10]
puts [pow 10 2]
puts [ceil 10.34]
puts [hypot 10 20]
puts [srand 45]
puts [log 10]
puts [srand 45]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

0.6483608274590866
100.0
11.0
22.360679774997898
0.0003521866166741525
2.302585092994046
0.0003521866166741525

Chức năng hệ thống

Các chức năng hệ thống quan trọng trong Tcl bao gồm,

  • clock - Chức năng giây, trả về thời gian hiện tại tính bằng giây.

  • clock - chức năng định dạng, định dạng giây thành ngày và giờ.

  • clock - Chức năng quét, quét chuỗi đầu vào và chuyển đổi nó thành giây.

  • open - hàm, được sử dụng để mở một tệp.

  • exec - hàm, được sử dụng để thực hiện một lệnh hệ thống.

  • close - hàm, được sử dụng để đóng tệp.

Một số ví dụ cho các hàm trên được liệt kê dưới đây:

#!/usr/bin/tclsh

#get seconds
set currentTime [clock seconds]
puts $currentTime
#get format 
puts "The time is: [clock format $currentTime -format %H:%M:%S]" puts "The date is: [clock format $currentTime -format %D]"

set date "Jun 15, 2014"
puts [clock scan $date -format {%b %d, %Y}] puts [exec ls] puts [exec dir] set a [open input.txt] puts [read $a];
puts $a close $a

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

1402819756
The time is: 03:09:16
The date is: 06/15/2014
1402808400
input.txt
main.tcl
input.txt  main.tcl
This is the file you can use to provide input to your program and later on open
   it inside your program to process the input.

file3

Bảng sau cung cấp các chuỗi danh sách có thể được sử dụng để định dạng ngày và giờ.

Sr.No. Định dạng & Mô tả
1

%a

Ngày ở dạng ngắn gọn, ví dụ: Mặt trời.

2

%A

Ngày ở dạng đầy đủ, ví dụ: Chủ nhật.

3

%b

Tháng ở dạng ngắn.

4

%B

Tháng ở dạng đầy đủ.

5

%d

Ngày trong tháng.

6

%j

Ngày Julian trong năm.

7

%m

Số tháng.

số 8

%y

Năm có hai chữ số.

9

%Y

Năm có bốn chữ số.

10

%H

Giờ trong 24 giờ đồng hồ.

11

%I

Giờ trong 12 giờ đồng hồ.

12

%M

Phút.

13

%S

Giây.

14

%p

SA hoặc CH.

15

%D

Ngày bằng số, mm / dd / yy.

16

%r

Thời gian trong 12 giờ đồng hồ.

17

%R

Thời gian trong 24 giờ đồng hồ không có giây.

18

%T

Thời gian trong 24 giờ đồng hồ với giây.

19

%Z

Tên múi giờ như GMT, IST, EST, v.v.

Lệnh "regexp" được sử dụng để khớp một biểu thức chính quy trong Tcl. Biểu thức chính quy là một chuỗi các ký tự có chứa mẫu tìm kiếm. Nó bao gồm nhiều quy tắc và bảng sau giải thích các quy tắc này và cách sử dụng tương ứng.

Sr.No. Quy tắc & Mô tả
1

x

Kết hợp chuẩn xác.

2

[a-z]

Bất kỳ chữ cái thường nào từ az.

3

.

Nhân vật bất kỳ.

4

^

Chuỗi bắt đầu phải khớp.

5

$

Chuỗi kết thúc phải khớp.

6

\^

Chuỗi dấu gạch chéo ngược để khớp với ký tự đặc biệt ^. Tương tự bạn có thể sử dụng cho các ký tự khác.

7

()

Thêm các chuỗi trên vào trong dấu ngoặc đơn để tạo biểu thức chính quy.

số 8

x*

Phải khớp với 0 hoặc nhiều lần xuất hiện của x trước đó.

9

x+

Phải khớp với 1 hoặc nhiều lần xuất hiện của x trước đó.

10

[a-z]?

Phải khớp với 0 hoặc 1 lần xuất hiện của x trước đó.

11

{digit}

Khớp chính xác số lần xuất hiện của biểu thức regex trước đó. Chữ số có chứa 0-9.

12

{digit,}

Khớp với 3 lần xuất hiện chữ số trở lên của biểu thức regex trước đó. Chữ số có chứa 0-9.

13

{digit1,digit2}

Số lần xuất hiện khớp với phạm vi giữa các lần xuất hiện chữ số 1 và chữ số 2 của biểu thức regex trước đó.

Cú pháp

Cú pháp cho regex được đưa ra dưới đây:

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn

Ở đây, regex là lệnh. Chúng ta sẽ xem về các công tắc tùy chọn sau. Các mẫu là các quy tắc như đã đề cập trước đó. Chuỗi tìm kiếm là chuỗi thực tế mà regex được thực hiện. Đối sánh đầy đủ là bất kỳ biến nào để giữ kết quả của kết quả regex đã khớp. Submatch1 đến SubMatchn là biến SubMatch tùy chọn chứa kết quả của các mẫu đối sánh phụ.

Hãy xem một số ví dụ đơn giản trước khi đi sâu vào những ví dụ phức tạp. Một ví dụ đơn giản cho một chuỗi với bất kỳ bảng chữ cái nào. Khi bất kỳ ký tự nào khác gặp phải regex, tìm kiếm sẽ bị dừng và trả về.

#!/usr/bin/tclsh

regexp {([A-Za-z]*)} "Tcl Tutorial" a b 
puts "Full Match: $a"
puts "Sub Match1: $b"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Full Match: Tcl
Sub Match1: Tcl

Nhiều mẫu

Ví dụ sau đây cho thấy cách tìm kiếm nhiều mẫu. Đây là mẫu ví dụ cho bất kỳ bảng chữ cái nào được theo sau bởi bất kỳ ký tự nào theo sau bởi bất kỳ bảng chữ cái nào.

#!/usr/bin/tclsh

regexp {([A-Za-z]*).([A-Za-z]*)} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b" puts "Sub Match2: $c"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Full Match: Tcl Tutorial
Sub Match1: Tcl
Sub Match2: Tutorial

Một phiên bản sửa đổi của mã trên để cho thấy một mẫu con có thể chứa nhiều mẫu được hiển thị bên dưới:

#!/usr/bin/tclsh

regexp {([A-Za-z]*.([A-Za-z]*))} "Tcl Tutorial" a b c  
puts "Full Match: $a" puts "Sub Match1: $b"
puts "Sub Match2: $c"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Công tắc cho lệnh Regex

Danh sách các công tắc có sẵn trong Tcl là,

  • nocase - Dùng để bỏ qua trường hợp.

  • indices - Lưu trữ vị trí của các mẫu phụ phù hợp thay vì các ký tự phù hợp.

  • line- Kết hợp nhạy dòng mới. Bỏ qua các ký tự sau dòng mới.

  • start index - Đặt độ lệch của thời điểm bắt đầu mẫu tìm kiếm.

  • Đánh dấu sự kết thúc của công tắc

Trong các ví dụ trên, tôi đã cố ý sử dụng [AZ, az] cho tất cả các bảng chữ cái, bạn có thể dễ dàng sử dụng -nocase thay vì như hình dưới đây -

#!/usr/bin/tclsh

regexp -nocase {([A-Z]*.([A-Z]*))} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b" puts "Sub Match2: $c"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Một ví dụ khác sử dụng công tắc được hiển thị bên dưới:

#!/usr/bin/tclsh

regexp -nocase -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b 
puts "Full Match: $a" puts "Sub Match1: $b"
regexp -nocase -start 4 -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b  
puts "Full Match: $a" puts "Sub Match1: $b"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Full Match: Tcl 
Sub Match1: Tcl 
Full Match: Tutorial
Sub Match1: Tutorial

Tk đề cập đến Bộ công cụ và nó cung cấp các tiện ích GUI đa nền tảng, giúp bạn xây dựng Giao diện người dùng đồ họa. Nó được phát triển như một phần mở rộng cho ngôn ngữ kịch bản Tcl bởi John Ousterhout. Tk vẫn được phát triển độc lập với Tcl với các phiên bản khác nhau, trước đó, nó đã được thực hiện đồng bộ với Tcl trong v8.0.

Đặc điểm của Tk

Nó là đa nền tảng với sự hỗ trợ cho các hệ điều hành Linux, Mac OS, Unix và Microsoft Windows.

  • Nó là một mã nguồn mở.
  • Nó cung cấp mức độ mở rộng cao.
  • Nó có thể tùy chỉnh.
  • Nó có thể cấu hình được.
  • Nó cung cấp một số lượng lớn các vật dụng.
  • Nó có thể được sử dụng với các ngôn ngữ động khác và không chỉ Tcl.
  • GUI trông giống hệt nhau trên các nền tảng.

Ứng dụng được xây dựng trong Tk

Các ứng dụng thành công lớn đã được xây dựng trong Tcl / Tk.

  • Bảng điều khiển Giao diện người dùng mềm
  • GUI biểu mẫu cho DB quan hệ
  • Ad Hoc GUI cho DB quan hệ
  • Thiết kế hệ thống phần mềm / phần cứng
  • Xtask - Quản lý tác vụ
  • Nhạc học với Tcl và Tk
  • Ứng dụng lịch
  • Thư tk
  • Trình gỡ lỗi Tk

Nói chung, tất cả Mac và Linux mac đều được cài đặt sẵn Tk. Trong trường hợp, nó không có sẵn hoặc bạn cần phiên bản mới nhất, thì bạn có thể cần cài đặt nó. Windows không đi kèm với Tcl / Tk và bạn có thể cần sử dụng tệp nhị phân cụ thể của nó để cài đặt.

Thông dịch viên Tk

Nó chỉ là một chương trình nhỏ cho phép bạn gõ các lệnh Tk và thực hiện chúng từng dòng một. Nó dừng thực thi tệp tcl trong trường hợp gặp lỗi không giống như trình biên dịch thực thi đầy đủ.

Hãy có một tệp helloWorld.tcl như sau. Chúng tôi sẽ sử dụng chương trình này làm chương trình đầu tiên, chúng tôi chạy trên nền tảng bạn chọn.

#!/usr/bin/wish

grid [ttk::button .mybutton -text "Hello World"]

Phần sau chỉ giải thích cách cài đặt Tcl / Tk trên từng nền tảng có sẵn.

Cài đặt trên Windows

Tải xuống phiên bản mới nhất cho trình cài đặt windows từ danh sách các tệp nhị phân Active Tcl / Tk có sẵn. Phiên bản cộng đồng Tcl / Tk hoạt động miễn phí cho mục đích sử dụng cá nhân.

Chạy tệp thực thi đã tải xuống để cài đặt Tcl và Tk, có thể thực hiện bằng cách làm theo hướng dẫn trên màn hình.

Bây giờ, chúng ta có thể xây dựng và chạy tệp Tcl say helloWorld.tcl bằng cách chuyển sang thư mục chứa tệp bằng cd và sau đó thực hiện bước sau:

C:\Tcl> wish helloWorld.tcl

Nhấn enter và chúng ta sẽ thấy một kết quả như hình dưới đây -

Cài đặt trên Linux

Hầu hết các hệ điều hành Linux đều có sẵn Tk và bạn có thể bắt đầu ngay lập tức với các hệ thống đó. Trong trường hợp không có sẵn, bạn có thể sử dụng lệnh sau để tải xuống và cài đặt Tcl-Tk.

$ yum install tcl tk

Bây giờ, chúng ta có thể xây dựng và chạy tệp Tcl say helloWorld.tcl bằng cách chuyển sang thư mục chứa tệp bằng cách sử dụng cd command và sau đó sử dụng bước sau:

$ wish helloWorld.tcl

Nhấn enter và chúng ta sẽ thấy một kết quả tương tự như sau:

Cài đặt trên hệ thống dựa trên Debian

Trong trường hợp, nó không có sẵn trong hệ điều hành của bạn, bạn có thể sử dụng lệnh sau để tải xuống và cài đặt Tcl-Tk -

$ sudo apt-get install tcl tk

Bây giờ, chúng ta có thể xây dựng và chạy tệp Tcl say helloWorld.tcl bằng cách chuyển sang thư mục chứa tệp bằng cách sử dụng cd command và sau đó sử dụng các bước sau:

$ wish helloWorld.tcl

Nhấn enter và chúng ta sẽ thấy một kết quả tương tự như sau:

Cài đặt trên Mac OS X

Tải xuống phiên bản mới nhất cho gói Mac OS X từ danh sách các tệp nhị phân Active Tcl / Tk có sẵn. Phiên bản cộng đồng Active Tcl miễn phí cho mục đích sử dụng cá nhân.

Chạy tệp thực thi đã tải xuống để cài đặt Active Tcl, có thể được thực hiện bằng cách làm theo hướng dẫn trên màn hình.

Bây giờ, chúng ta có thể xây dựng và chạy tệp Tcl say helloWorld.tcl bằng cách chuyển sang thư mục chứa tệp bằng cách sử dụng cd command và sau đó sử dụng bước sau:

$ wish helloWorld.tcl

Nhấn enter và chúng ta sẽ thấy một kết quả như hình dưới đây -

Cài đặt từ tệp nguồn

Bạn có thể sử dụng tùy chọn cài đặt từ các tệp nguồn khi không có gói nhị phân. Thông thường, người ta ưu tiên sử dụng tệp nhị phân Tk cho Windows và Mac OS X, vì vậy chỉ biên dịch các nguồn trên hệ thống dựa trên unix được hiển thị bên dưới:

  • Tải xuống các tệp nguồn.

  • Bây giờ, sử dụng các lệnh sau để giải nén, biên dịch và xây dựng sau khi chuyển sang thư mục đã tải xuống.

$ tar zxf tk8.6.1-src.tar.gz
$ cd tcl8.6.1 $ cd unix
$ ./configure —with-tcl=../../tcl8.6.1/unix —prefix=/opt —enable-gcc $ make
$ sudo make install

Note - Hãy chắc chắn rằng, bạn thay đổi tên tệp thành phiên bản bạn đã tải xuống ở lệnh 1 và 2 ở trên.

Trong Tk, chúng tôi phân loại một số biến là các biến đặc biệt và chúng có cách sử dụng / chức năng được xác định trước. Danh sách các biến đặc biệt được liệt kê dưới đây.

Sr.No. Biến & Mô tả Đặc biệt
1

tk_library

Được sử dụng để thiết lập vị trí của các thư viện Tk tiêu chuẩn.

2

tk_patchLevel

Đề cập đến cấp bản vá hiện tại của trình thông dịch Tk.

3

tk_strictMotif

Khi khác 0, Tk cố gắng tuân thủ giao diện Motif càng chặt chẽ càng tốt.

4

tk_version

Hiển thị phiên bản Tk.

Các biến đặc biệt ở trên có ý nghĩa đặc biệt đối với trình thông dịch Tk.

Ví dụ về việc sử dụng các biến đặc biệt Tk

Hãy xem các ví dụ về các biến đặc biệt.

PHIÊN BẢN TK

#!/usr/bin/wish

puts $tk_version

Khi bạn chạy chương trình, bạn sẽ nhận được một kết quả tương tự như hình dưới đây.

8.5

TK THƯ VIỆN PATH

#!/usr/bin/wish

puts $tk_library

Khi bạn chạy chương trình, bạn sẽ nhận được một kết quả tương tự như hình dưới đây.

/Library/Frameworks/Tk.framework/Versions/8.6/Resources/Scripts

CẤP TK PATCH

#!/usr/bin/wish

puts $tk_patchLevel

Khi bạn chạy chương trình, bạn sẽ nhận được một kết quả tương tự như hình dưới đây.

8.6.1

TK STRICTMOTIF

#!/usr/bin/wish

puts $tk_strictMotif

Khi bạn chạy chương trình, bạn sẽ nhận được một kết quả tương tự như hình dưới đây.

0

Thành phần cơ bản của ứng dụng dựa trên Tk được gọi là widget. Một thành phần đôi khi cũng được gọi là cửa sổ, vì trong Tk, "cửa sổ" và "tiện ích con" thường được sử dụng thay thế cho nhau. Tk là một gói cung cấp một tập hợp các thành phần đồ họa phong phú để tạo các ứng dụng đồ họa với Tcl.

Tk cung cấp một loạt các widget khác nhau, từ các widget GUI cơ bản như các nút và menu đến các widget hiển thị dữ liệu. Các widget rất dễ cấu hình vì chúng có cấu hình mặc định nên dễ sử dụng.

Các ứng dụng Tk tuân theo một hệ thống phân cấp widget nơi bất kỳ số lượng widget nào có thể được đặt trong một widget khác và những widget đó trong một widget khác. Tiện ích chính trong chương trình Tk được gọi là tiện ích gốc và có thể được tạo bằng cách tạo một phiên bản mới của lớp TkRoot.

Tạo một Widget

Cú pháp để tạo một widget được đưa ra dưới đây.

type variableName arguments options

Loại ở đây đề cập đến loại tiện ích con như nút, nhãn, v.v. Đối số có thể là tùy chọn và được yêu cầu dựa trên cú pháp riêng của từng tiện ích con. Các tùy chọn bao gồm từ kích thước đến định dạng của từng thành phần.

Quy ước đặt tên tiện ích con

Widget sử dụng một cấu trúc tương tự như đặt tên cho các gói. Trong Tk, cửa sổ gốc được đặt tên bằng dấu chấm (.) Và một phần tử trong cửa sổ, ví dụ nút được đặt tên là .myButton1. Tên biến phải bắt đầu bằng chữ thường, chữ số hoặc dấu chấm câu (trừ dấu chấm). Sau ký tự đầu tiên, các ký tự khác có thể là chữ hoa hoặc chữ thường, số hoặc dấu chấm câu (trừ dấu chấm). Bạn nên sử dụng một ký tự viết thường để bắt đầu nhãn.

Quy ước đặt tên màu

Các màu có thể được khai báo bằng tên như đỏ, xanh lá cây, v.v. Nó cũng có thể sử dụng hệ thập lục phân biểu diễn bằng #. Số lượng chữ số thập lục phân có thể là 3, 6, 9 hoặc 12.

Quy ước về thứ nguyên

Đơn vị mặc định là pixel và nó được sử dụng khi chúng tôi chỉ định không có thứ nguyên. Các kích thước khác là i cho inch, m cho milimét, c cho cm và p cho điểm.

Các tùy chọn chung

Có rất nhiều tùy chọn phổ biến có sẵn cho tất cả các tiện ích con và chúng được liệt kê bên dưới trong bảng sau:

Sr.No. Cú pháp & Mô tả
1

-background color

Dùng để đặt màu nền cho widget.

2

-borderwidth width

Được sử dụng để vẽ với đường viền trong hiệu ứng 3D.

3

-font fontDescriptor

Dùng để đặt phông chữ cho widget.

4

-foreground color

Dùng để thiết lập màu nền trước cho widget.

5

-height number

Dùng để đặt chiều cao cho widget.

6

-highlightbackground color

Được sử dụng để đặt hình chữ nhật màu để vẽ xung quanh tiện ích con khi tiện ích con không có tiêu điểm đầu vào.

7

-highlightcolor color

Được sử dụng để đặt hình chữ nhật màu để vẽ xung quanh tiện ích khi tiện ích có tiêu điểm đầu vào.

số 8

-padx number

Đặt padx cho tiện ích con.

9

-pady number

Đặt pady cho widget.

10

-relief condition

Đặt phù điêu 3D cho tiện ích này. Tình trạng có thể nổi lên, trũng xuống, phẳng, có rãnh, đặc hoặc rãnh.

11

-text text

Đặt văn bản cho tiện ích con.

12

-textvariable varName

Biến được liên kết với tiện ích con. Khi văn bản của tiện ích con thay đổi, biến được đặt bằng văn bản của tiện ích con.

13

-width number

Đặt chiều rộng cho widget.

Một ví dụ đơn giản cho các tùy chọn được hiển thị bên dưới.

#!/usr/bin/wish

grid [label .myLabel -background red -text "Hello World" -relief ridge -borderwidth 3]
   -padx 100 -pady 100

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau.

Danh sách các vật dụng có sẵn được phân loại dưới đây:

Các vật dụng cơ bản

Sr.No. Widget & Mô tả
1

Label

Tiện ích để hiển thị một dòng văn bản.

2

Button

Tiện ích con có thể nhấp và kích hoạt một hành động.

3

Entry

Widget được sử dụng để chấp nhận một dòng văn bản làm đầu vào.

4

Message

Widget để hiển thị nhiều dòng văn bản.

5

Text

Widget để hiển thị và tùy chọn chỉnh sửa nhiều dòng văn bản.

6

Toplevel

Cửa sổ với tất cả các đường viền và trang trí được cung cấp bởi trình quản lý Cửa sổ.

Tiện ích bố cục

Sr.No. Widget & Mô tả
1

Frame

Container widget để chứa các widget khác.

2

Place

Widget để giữ các widget khác ở một vị trí cụ thể với tọa độ gốc và kích thước chính xác.

3

Pack

Widget đơn giản để tổ chức widget theo khối trước khi đặt chúng vào widget cha.

4

Grid

Widget để lồng các vật dụng đóng gói theo các hướng khác nhau.

Các tiện ích lựa chọn

Sr.No. Widget & Mô tả
1

Radiobutton

Tiện ích có một tập hợp các nút và nhãn bật / tắt, một trong số đó có thể được chọn.

2

Checkbutton

Tiện ích có một tập hợp các nút bật / tắt và nhãn, nhiều trong số đó có thể được chọn ..

3

Menu

Widget hoạt động như một ngăn chứa các mục menu.

4

Listbox

Widget hiển thị danh sách các ô, một hoặc nhiều ô có thể được chọn.

Mega Widgets

Sr.No. Widget & Mô tả
1

Dialog

Widget để hiển thị các hộp thoại.

2

Spinbox

Widget cho phép người dùng chọn số.

3

Combobox

Tiện ích kết hợp mục nhập với danh sách các lựa chọn có sẵn để sử dụng.

4

Notebook

Tiện ích con theo tab giúp chuyển đổi giữa một trong một số trang, sử dụng tab chỉ mục.

5

Progressbar

Tiện ích con để cung cấp phản hồi trực quan về tiến trình của một hoạt động dài như tải tệp lên.

6

Treeview

Widget để hiển thị và cho phép duyệt qua một hệ thống phân cấp các mục hơn ở dạng cây.

7

Scrollbar

Các widget cuộn không có văn bản hoặc widget canvas.

số 8

Scale

Mở rộng widget để chọn một giá trị số thông qua các thanh trượt.

Các tiện ích khác

Sr.No. Widget & Mô tả
1

Canvas

Tiện ích vẽ để hiển thị đồ họa và hình ảnh ..

Chúng tôi sẽ đề cập đến từng widget này trong các chương sắp tới.

Các widget cơ bản là các widget phổ biến có sẵn trong hầu hết các ứng dụng Tk. Dưới đây là danh sách các widget cơ bản có sẵn:

Sr.No. Widget & Mô tả
1 Nhãn

Tiện ích để hiển thị một dòng văn bản.

2 Cái nút

Tiện ích con có thể nhấp và kích hoạt một hành động.

3 Nhập cảnh

Widget được sử dụng để chấp nhận một dòng văn bản làm đầu vào.

4 Thông điệp

Widget để hiển thị nhiều dòng văn bản.

5 Bản văn

Widget để hiển thị và tùy chọn chỉnh sửa nhiều dòng văn bản.

6 Toplevel

Tiện ích được sử dụng để tạo khung là cửa sổ cấp cao nhất mới.

Dưới đây là một ví dụ Tk đơn giản bằng cách sử dụng các widget cơ bản -

#!/usr/bin/wish

grid [label .myLabel -text "Label Widget" -textvariable labelText] 
grid [text .myText -width 20 -height 5]
.myText insert 1.0 "Text\nWidget\n"
grid [entry .myEntry -text "Entry Widget"]
grid [message .myMessage -background red -foreground white -text "Message\nWidget"]
grid [button .myButton1  -text "Button" -command "set labelText clicked"]

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:

Các widget bố cục được sử dụng để xử lý bố cục cho ứng dụng Tk. Tiện ích khung được sử dụng nhóm các tiện ích khác và vị trí, gói và lưới là trình quản lý bố cục để cung cấp cho bạn toàn quyền kiểm soát việc thêm vào cửa sổ. Danh sách các widget bố cục có sẵn như được hiển thị bên dưới -

Sr.No. Widget & Mô tả
1 Khung

Container widget để chứa các widget khác.

2 Địa điểm

Widget để giữ các widget khác ở một vị trí cụ thể với tọa độ gốc và kích thước chính xác.

3 Đóng gói

Widget đơn giản để tổ chức widget theo khối trước khi đặt chúng vào widget cha.

4 Lưới

Widget để lồng các vật dụng đóng gói theo các hướng khác nhau.

Dưới đây là một ví dụ Tk đơn giản cho các widget bố cục -

#!/usr/bin/wish

frame .myFrame1 -background red  -relief ridge -borderwidth 8 -padx 10 -pady 10
   -height 100 -width 100
frame .myFrame2 -background blue  -relief ridge -borderwidth 8 -padx 10 -pady 10
   -height 100 -width 50
pack .myFrame1 
pack .myFrame2

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:

Các widget lựa chọn được sử dụng để chọn các tùy chọn khác nhau trong ứng dụng Tk. Danh sách các widget lựa chọn có sẵn như hình dưới đây.

Sr.No. Widget & Mô tả
1 Nút radio

Tiện ích có một tập hợp các nút và nhãn bật / tắt, một trong số đó có thể được chọn.

2 Nút kiểm tra

Tiện ích có một tập hợp các nút và nhãn bật / tắt, nhiều trong số đó có thể được chọn.

3 Thực đơn

Widget hoạt động như một ngăn chứa các mục menu.

4 Hộp danh sách

Widget hiển thị danh sách các ô, một hoặc nhiều ô có thể được chọn.

Dưới đây là một ví dụ Tk đơn giản bằng cách sử dụng các widget lựa chọn -

#!/usr/bin/wish

grid [frame .gender ]
grid [label .label1  -text "Male" -textvariable myLabel1 ] 
grid [radiobutton .gender.maleBtn -text "Male"   -variable gender -value "Male"
   -command "set  myLabel1 Male"] -row 1 -column 2
grid [radiobutton .gender.femaleBtn -text "Female" -variable gender -value "Female"
   -command "set  myLabel1 Female"] -row 1 -column 3
.gender.maleBtn select
grid [label .myLabel2  -text "Range 1 not selected" -textvariable myLabelValue2 ] 
grid [checkbutton .chk1 -text "Range 1" -variable occupied1 -command {if {$occupied1 } {
   set myLabelValue2 {Range 1 selected}
} else {
   set myLabelValue2 {Range 1 not selected}
} }]
proc setLabel {text} {
   .label configure -text $text 
}

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:

Canvas được sử dụng để cung cấp các khu vực vẽ. Cú pháp cho tiện ích canvas được hiển thị bên dưới:

canvas canvasName options

Tùy chọn

Các tùy chọn có sẵn cho tiện ích canvas được liệt kê bên dưới trong bảng sau:

Sr.No. Cú pháp & Mô tả
1

-background color

Dùng để đặt màu nền cho widget.

2

-closeenough distance

Đặt mức độ gần của con trỏ chuột với một mục có thể hiển thị. Giá trị mặc định là 1,0 pixel. Giá trị này có thể là một phân số và phải là số dương.

3

-scrollregion boundingBox

Hộp giới hạn cho tổng diện tích của canvas này.

4

-height number

Dùng để đặt chiều cao cho widget.

5

-width number

Đặt chiều rộng cho widget.

6

-xscrollincrement size

Số lượng để cuộn theo chiều ngang khi cuộn được yêu cầu.

7

-yscrollincrement size

Số lượng để cuộn theo chiều dọc khi cuộn được yêu cầu.

Ví dụ đơn giản cho tiện ích canvas được hiển thị bên dưới:

#!/usr/bin/wish

canvas .myCanvas -background red -width 100 -height 100 
pack .myCanvas

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:

Các tiện ích để vẽ trong Canvas

Danh sách các widget có sẵn để vẽ trong canvas được liệt kê dưới đây:

Sr.No. Widget & Mô tả
1 Hàng

Vẽ một dòng.

2 Vòng cung

Vẽ một vòng cung.

3 Hình chữ nhật

Vẽ một hình chữ nhật.

4 hình trái xoan

Vẽ một hình bầu dục.

5 Đa giác

Vẽ một đa giác.

6 Bản văn

Vẽ một văn bản.

7 Bản đồ bit

Vẽ một bitmap.

số 8 Hình ảnh

Vẽ một hình ảnh.

Dưới đây là một ví dụ sử dụng các widget canvas khác nhau -

#!/usr/bin/wish

canvas .myCanvas -background red -width 200 -height 200 
pack .myCanvas
.myCanvas create arc 10 10 50 50 -fill yellow
.myCanvas create line 10 30 50 50 100 10 -arrow both -fill yellow -smooth true
   -splinesteps 2
.myCanvas create oval 50 50 100 80 -fill yellow
.myCanvas create polygon 50 150 100 80 120 120 100 190 -fill yellow -outline green
.myCanvas create rectangle 150 150 170 170  -fill yellow
.myCanvas create text 170 20 -fill yellow -text "Hello" -font {Helvetica -18 bold}
.myCanvas create bitmap 180 50 -bitmap info

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:

Mega widget bao gồm nhiều widget phức tạp thường được yêu cầu trong một số ứng dụng Tk quy mô lớn. Danh sách các tiện ích lớn có sẵn như được hiển thị bên dưới -

Sr.No. Widget & Mô tả
1 Hộp thoại

Widget để hiển thị các hộp thoại.

2 Hộp xoay

Widget cho phép người dùng chọn số.

3 Hộp tổ hợp

Tiện ích kết hợp mục nhập với danh sách các lựa chọn có sẵn để sử dụng.

4 Sổ tay

Tiện ích con theo tab giúp chuyển đổi giữa một trong một số trang, sử dụng tab chỉ mục.

5 Thanh tiến trình

Tiện ích con để cung cấp phản hồi trực quan về tiến trình của một hoạt động dài như tải tệp lên.

6 Treeview

Widget để hiển thị và cho phép duyệt qua một hệ thống phân cấp các mục hơn ở dạng cây.

7 Thanh cuộn

Các widget cuộn không có văn bản hoặc widget canvas.

số 8 Tỉ lệ

Mở rộng widget để chọn một giá trị số thông qua các thanh trượt.

Dưới đây là một ví dụ Tk đơn giản bằng cách sử dụng một số tiện ích lớn.

#!/usr/bin/wish

ttk::treeview .tree -columns "Creator Year" -displaycolumns "Year Creator" 
.tree heading Creator -text "Creator" -anchor center
.tree heading Year -text "Year" -anchor center
pack .tree
.tree insert {} end -id Languages -text "Languages"
.tree insert Languages end -text C -values [list "Dennis Ritchie" "1990"]
proc scaleMe {mywidget scaleValue} {
	$mywidget configure -length $scaleValue
} 
pack [scale .s2  -from 100.0 -to 200.0 -length 100 -background yellow -borderwidth 5
   -font{Helvetica -18 bold} -foreground red -width 40 -relief ridge -orien horizontal
   -variable a -command "scaleMe .s2" ]
pack [ttk::progressbar .p1 -orient horizontal -length 200 -mode indeterminate -value 90]
pack [ttk::progressbar .p2 -orient horizontal -length 200 -mode determinate -variable a
   -maximum 75 -value 20]

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:

Có một số widget hỗ trợ hiển thị văn bản. Hầu hết trong số này cung cấp tùy chọn thuộc tính phông chữ. Cú pháp để tạo một phông chữ được hiển thị bên dưới:

font create fontName options

Tùy chọn

Các tùy chọn có sẵn để tạo phông chữ được liệt kê bên dưới trong bảng sau:

Sr.No. Cú pháp & Mô tả
1

-family familyName

Tên của họ phông chữ.

2

-size number

Kích thước của phông chữ.

3

-weight level

Trọng lượng cho phông chữ.

Dưới đây là một ví dụ đơn giản để tạo phông chữ:

#!/usr/bin/wish

font create myFont -family Helvetica -size 18 -weight bold 
pack [label .myLabel -font myFont -text "Hello World"]

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:

Để có được tất cả các phông chữ có sẵn, chúng ta có thể sử dụng lệnh sau:

#!/usr/bin/wish

puts [font families]

Khi chúng ta chạy lệnh trên, chúng ta sẽ nhận được kết quả sau:

{Abadi MT Condensed Extra Bold} {Abadi MT Condensed Light} {Al Bayan} {Al Nile}
{Al Tarikh} {American Typewriter} {Andale Mono} Arial {Arial Black}
{Arial Hebrew} {Arial Narrow} {Arial Rounded MT Bold} {Arial Unicode MS}
Athelas Avenir {Avenir Next} {Avenir Next Condensed} Ayuthaya Baghdad {Bangla MN}
{Bangla Sangam MN} {Baoli SC} Baskerville {Baskerville Old Face} Batang {Bauhaus 93}
Beirut {Bell MT} {Bernard MT Condensed} BiauKai {Big Caslon} {Book Antiqua}
{Bookman Old Style} {Bookshelf Symbol 7} Braggadocio {Britannic Bold} {Brush Script MT}
Calibri {Calisto MT} Cambria {Cambria Math} Candara Century {Century Gothic}
{Century Schoolbook} Chalkboard {Chalkboard SE} Chalkduster {Charcoal CY} Charter
Cochin {Colonna MT} {Comic Sans MS} Consolas Constantia {Cooper Black} Copperplate
{Copperplate Gothic Bold} {Copperplate Gothic Light} Corbel {Corsiva Hebrew} Courier
{Courier New} {Curlz MT} Damascus {DecoType Naskh} Desdemona {Devanagari MT}
{Devanagari Sangam MN} Didot {DIN Alternate} {DIN Condensed} {Diwan Kufi} {Diwan Thuluth}
{Edwardian Script ITC} {Engravers MT} {Euphemia UCAS} Eurostile Farah Farisi
{Footlight MT Light} {Franklin Gothic Book} {Franklin Gothic Medium}
Futura Gabriola Garamond {GB18030 Bitmap} {Geeza Pro} Geneva {Geneva CY}
Georgia {Gill Sans} {Gill Sans MT} {Gloucester MT Extra Condensed}
{Goudy Old Style} {Gujarati MT} {Gujarati Sangam MN} Gulim GungSeo {Gurmukhi MN}
{Gurmukhi MT} {Gurmukhi Sangam MN} Haettenschweiler {Hannotate SC} {Hannotate TC}
{HanziPen SC} {HanziPen TC} Harrington HeadLineA Hei {Heiti SC} {Heiti TC}
Helvetica {Helvetica CY} {Helvetica Neue} Herculanum {Hiragino Kaku Gothic Pro}
{Hiragino Kaku Gothic ProN} {Hiragino Kaku Gothic Std} {Hiragino Kaku Gothic StdN}
{Hiragino Maru Gothic Pro} {Hiragino Maru Gothic ProN}
{Hiragino Mincho Pro} {Hiragino Mincho ProN} {Hiragino Sans GB}
{Hoefler Text} Impact {Imprint MT Shadow} InaiMathi {Iowan Old Style} Kai Kailasa
{Kaiti SC} {Kaiti TC} {Kannada MN} {Kannada Sangam MN} Kefa {Khmer MN} {Khmer Sangam MN}
{Kino MT} Kokonor Krungthep KufiStandardGK {Lantinghei SC} {Lantinghei TC} {Lao MN}
{Lao Sangam MN} {Libian SC} {LiHei Pro} {LiSong Pro} {Lucida Blackletter} {Lucida Bright}
{Lucida Calligraphy} {Lucida Console} {Lucida Fax} {Lucida Grande} {Lucida Handwriting}
{Lucida Sans} {Lucida Sans Typewriter} {Lucida Sans Unicode} {Malayalam MN}
{Malayalam Sangam MN} Marion {Marker Felt} Marlett {Matura MT Script Capitals}
Meiryo Menlo {Microsoft Sans Serif} Mishafi Mistral {Modern No. 20} Monaco {MS Gothic}
{MS Mincho} {MS PGothic} {MS PMincho} {MS Reference Sans Serif} {MS Reference Specialty}
Mshtakan {MT Extra} Muna {Myanmar MN} {Myanmar Sangam MN} Nadeem {Nanum Brush Script}
{Nanum Gothic} {Nanum Myeongjo} {Nanum Pen Script} {New Peninim MT} {News Gothic MT}
Noteworthy Onyx Optima {Oriya MN} {Oriya Sangam MN} Osaka Palatino {Palatino Linotype}
Papyrus PCMyungjo Perpetua {Perpetua Titling MT} PilGi {Plantagenet Cherokee}
Playbill PMingLiU {PT Mono} {PT Sans} {PT Sans Caption} {PT Sans Narrow} {PT Serif}
{PT Serif Caption} Raanana Rockwell {Rockwell Extra Bold} Sana Sathu {Savoye LET}
Seravek Silom SimSun {Sinhala MN} {Sinhala Sangam MN} Skia {Snell Roundhand} {Songti SC}
{Songti TC} Stencil STFangsong STHeiti STIXGeneral STIXIntegralsD STIXIntegralsSm
STIXIntegralsUp STIXIntegralsUpD STIXIntegralsUpSm STIXNonUnicode STIXSizeFiveSym
STIXSizeFourSym STIXSizeOneSym STIXSizeThreeSym STIXSizeTwoSym STIXVariants STKaiti
STSong Superclarendon Symbol Tahoma {Tamil MN} {Tamil Sangam MN} TeamViewer8 {Telugu MN}
{Telugu Sangam MN} Thonburi Times {Times New Roman} {Trebuchet MS} {Tw Cen MT} Verdana
Waseem {Wawati SC} {Wawati TC} Webdings {Weibei SC} {Weibei TC} {Wide Latin} Wingdings
{Wingdings 2} {Wingdings 3} {Xingkai SC} {Yuanti SC} YuGothic YuMincho {Yuppy SC}
{Yuppy TC} {Zapf Dingbats} Zapfino {Apple Braille} {Apple Chancery} {Apple Color Emoji}
{Apple LiGothic} {Apple LiSung} {Apple SD Gothic Neo} {Apple Symbols}
AppleGothic AppleMyungjo {Monotype Corsiva} {Monotype Sorts}

Tiện ích hình ảnh được sử dụng để tạo và thao tác trên hình ảnh. Cú pháp tạo hình ảnh như sau:

image create type name options

Trong kiểu cú pháp trên là ảnh hoặc bitmap và tên là định danh hình ảnh.

Tùy chọn

Các tùy chọn có sẵn để tạo hình ảnh được liệt kê bên dưới trong bảng sau:

Sr.No. Cú pháp & Mô tả
1

-file fileName

Tên của tên tệp hình ảnh.

2

-height number

Dùng để đặt chiều cao cho widget.

3

-width number

Đặt chiều rộng cho widget.

4

-data string

Hình ảnh trong chuỗi mã hóa cơ sở 64.

Một ví dụ đơn giản cho tiện ích hình ảnh được hiển thị bên dưới:

#!/usr/bin/wish

image create photo imgobj -file "/Users/rajkumar/Desktop/F Drive/pictur/vb/Forests/
   680049.png" -width 400 -height 400 
pack [label .myLabel]
.myLabel configure -image imgobj

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:

Chức năng khả dụng cho hình ảnh được liệt kê bên dưới trong bảng sau:

Sr.No. Cú pháp & Mô tả
1

image delete imageName

Xóa hình ảnh khỏi bộ nhớ và các vật dụng liên quan một cách trực quan.

2

image height imageName

Trả về chiều cao cho hình ảnh.

3

image width imageName

Trả về chiều rộng cho hình ảnh.

4

image type imageName

Trả về kiểu cho hình ảnh.

5

image names

Trả về danh sách hình ảnh trực tiếp trong bộ nhớ.

Dưới đây là một ví dụ đơn giản để sử dụng các lệnh widget hình ảnh:

#!/usr/bin/wish

image create photo imgobj -file "/Users/rajkumar/images/680049.png"
   -width 400 -height 400 
pack [label .myLabel]
.myLabel configure -image imgobj
puts [image height imgobj]
puts [image width imgobj]
puts [image type imgobj]
puts [image names]
image delete imgobj

Hình ảnh sẽ bị xóa trực quan và khỏi bộ nhớ sau khi lệnh "image delete imgobj" thực thi. Trong bảng điều khiển, đầu ra sẽ giống như sau:

400
400
photo
imgobj ::tk::icons::information ::tk::icons::error ::tk::icons::
warning ::tk::icons::question

Các sự kiện ở dạng đơn giản nhất được xử lý với sự trợ giúp của các lệnh. Một ví dụ đơn giản về xử lý sự kiện là xử lý sự kiện bằng nút và được hiển thị bên dưới:

#!/usr/bin/wish

proc myEvent { } {
   puts "Event triggered"
}
pack [button .myButton1  -text "Button 1"   -command myEvent]

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:

Một chương trình đơn giản để hiển thị sự kiện hoạt ảnh văn bản trì hoãn được hiển thị bên dưới:

#!/usr/bin/wish

proc delay {} {
   for {set j 0} {$j < 100000} {incr j} {} 
}

label .myLabel -text "Hello................" -width 25
pack .myLabel
set str "Hello................"
for {set i [string length $str]} {$i > -2} {set i [expr $i-1]} { .myLabel configure -text [string range $str 0 $i]
   update
   delay
}

Khi chúng tôi chạy chương trình, chúng tôi sẽ nhận được kết quả sau theo cách hoạt hình:

Sự kiện sau khi trì hoãn

Cú pháp cho sự kiện sau khi trì hoãn được hiển thị bên dưới:

after milliseconds number command

Một chương trình đơn giản để hiển thị sau sự kiện trì hoãn được hiển thị bên dưới:

#!/usr/bin/wish

proc addText {} {
   label .myLabel -text "Hello................" -width 25
   pack .myLabel
}
after 1000 addText

Khi chúng tôi chạy chương trình, chúng tôi sẽ nhận được kết quả sau sau một giây:

Bạn có thể hủy sự kiện bằng lệnh sau khi hủy như hình dưới đây -

#!/usr/bin/wish

proc addText {} {
   label .myLabel -text "Hello................" -width 25
   pack .myLabel
}
after 1000 addText
after cancel addText

Sự kiện ràng buộc

Cú pháp cho ràng buộc sự kiện như được hiển thị bên dưới:

bind arguments

Ví dụ về sự kiện bàn phím

#!/usr/bin/wish

bind .  {puts "Key Pressed: %K "}

Khi chúng tôi chạy chương trình và nhấn một ký tự X, chúng tôi sẽ nhận được kết quả sau:

Key Pressed: X

Ví dụ về sự kiện chuột

#!/usr/bin/wish

bind .  {puts "Button %b Pressed : %x %y "}

Khi chúng ta chạy chương trình và nhấn nút chuột trái, chúng ta sẽ nhận được kết quả tương tự như sau:

Button 1 Pressed : 89 90

Liên kết sự kiện với ví dụ về nút

#!/usr/bin/wish

proc myEvent { } {
   puts "Event triggered"
}
pack [button .myButton1  -text "Button 1"   -command myEvent]
bind .  ".myButton1 invoke"

Khi chúng tôi chạy chương trình và nhấn enter, chúng tôi sẽ nhận được kết quả sau:

Event triggered

Trình quản lý cửa sổ được sử dụng để xử lý cửa sổ cấp cao nhất. Nó giúp kiểm soát kích thước, vị trí và các thuộc tính khác của cửa sổ. Trong Tk ,. được sử dụng để chỉ cửa sổ chính. Cú pháp cho lệnh window được hiển thị bên dưới:

wm option window arguments

Danh sách các tùy chọn có sẵn cho lệnh Tk wm được hiển thị trong bảng sau:

Sr.No. Cú pháp & Mô tả
1

aspect windowName a b c d

Cố gắng duy trì tỷ lệ chiều rộng / chiều cao giữa a / b và c / d.

2

geometry windowName geometryParams

Sử dụng để thiết lập hình học cho cửa sổ.

3

grid windowName w h dx dy

Đặt kích thước lưới.

4

group windowName leaderName

leaderName cung cấp cho người lãnh đạo của một nhóm các cửa sổ liên quan.

5

deiconify windowName

Đưa màn hình về trạng thái bình thường nếu được thu nhỏ.

6

iconify windowName

Thu nhỏ cửa sổ.

7

state windowName

Trả về trạng thái hiện tại của cửa sổ.

số 8

withdraw windowName

Giải phóng cửa sổ và xóa các chi tiết của nó trong bộ nhớ.

9

iconbitmap windowName image

Đặt hoặc trả về biểu tượng bitmap.

10

iconPhoto windowName image

Đặt hoặc trả về ảnh biểu tượng.

11

command windowName commandString

Ghi lại lệnh khởi động trong thuộc tính WM_COMMAND.

12

protocol windowName arguments

Đăng ký một lệnh để xử lý tên yêu cầu giao thức, có thể là WM_DELETE_WINDOW,

WM_SAVE_YOURSELF,

WM_TAKE_FOCUS. Vd: giao thức wm.

WM_DELETE_WINDOW Thoát.

13

minsize windowName size

Xác định kích thước cửa sổ tối thiểu.

14

maxsize windowName size

Xác định kích thước cửa sổ tối đa.

15

title windowName titleText

Xác định tiêu đề cho cửa sổ.

16

attributes subOptions

Có rất nhiều thuộc tính có sẵn như alpha, toàn màn hình, v.v.

Một số lệnh trên được sử dụng trong ví dụ sau:

#!/usr/bin/wish

wm maxsize . 800 800
wm minsize . 300 300
wm title . "Hello"
wm attributes . -alpha ".90" 
wm geometry . 300x200+100+100

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:

Như bạn có thể thấy alpha là một trong những thuộc tính có sẵn. Danh sách các lệnh con thường được sử dụng được liệt kê dưới đây:

Sr.No. Cú pháp & Mô tả
1

-alpha number

Đặt alpha cho cửa sổ.

2

-fullscreen number

Số có thể là 0 cho màn hình bình thường hoặc 1 cho toàn màn hình.

3

-topmost number

Đặt hoặc trả về liệu cửa sổ có nằm trên cùng hay không. Giá trị có thể là 0 hoặc 1.

Tạo cửa sổ

Chúng ta có thể sử dụng lệnh toplevel để tạo cửa sổ và một ví dụ được hiển thị bên dưới:

#!/usr/bin/wish

toplevel .t

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:

Cửa sổ phá hủy

Chúng ta có thể sử dụng lệnh hủy để hủy cửa sổ và một ví dụ được hiển thị bên dưới:

#!/usr/bin/wish

destroy .t

Lệnh trên sẽ hủy cửa sổ có tên .t.

Trình quản lý hình học được sử dụng để quản lý hình học của cửa sổ và các khung khác. Chúng ta có thể sử dụng nó để xử lý vị trí và kích thước của cửa sổ và khung. Các widget bố cục được sử dụng cho mục đích này.

Định vị và định cỡ

Cú pháp cho cửa sổ định vị và định cỡ được hiển thị bên dưới:

wm geometry . wxh+/-x+/-y

Ở đây, w đề cập đến chiều rộng và h là chiều cao. Tiếp theo là dấu '+' hoặc '-' với số tiếp theo đề cập đến vị trí x trên màn hình. Tương tự, dấu '+' hoặc '-' sau đây với số đề cập đến vị trí y trên màn hình

Một ví dụ đơn giản được hiển thị bên dưới cho Tuyên bố trên -.

#!/usr/bin/wish

wm geometry . 300x200+100+100

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:

Hình học lưới

Cú pháp cho hình học lưới được hiển thị bên dưới:

grid gridName -column number -row number -columnspan number -rowspan number

Cột, hàng, khoảng cột hoặc dải hàng giúp cung cấp hình dạng lưới.

Một ví dụ đơn giản được hiển thị bên dưới cho câu lệnh trên -

#!/usr/bin/wish

frame .myFrame1 -background red  -height 100 -width 100
frame .myFrame2 -background blue -height 100 -width 50
grid .myFrame1 -columnspan 10 -rowspan 10 -sticky w
grid .myFrame2 -column 10 -row 2

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau: