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ực và nhâ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 error và catchcá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: