Ruby - Hướng dẫn Tk
Giới thiệu
Giao diện người dùng đồ họa tiêu chuẩn (GUI) cho Ruby là Tk. Tk khởi đầu là GUI cho ngôn ngữ kịch bản Tcl do John Ousterhout phát triển.
Tk có điểm khác biệt duy nhất là GUI đa nền tảng duy nhất. Tk chạy trên Windows, Mac và Linux và cung cấp giao diện gốc trên mỗi hệ điều hành.
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.
Các ứng dụng Tk tuân theo một hệ thống phân cấp tiện ích trong đó bất kỳ số lượng tiện ích nào có thể được đặt trong một tiện ích con khác và những tiện ích con đó trong một tiện ích con khác, ad infinitum. 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.
Hầu hết các ứng dụng dựa trên Tk đều tuân theo cùng một chu trình: tạo các widget, đặt chúng vào giao diện và cuối cùng, liên kết các sự kiện liên quan đến từng widget với một phương thức.
Có ba nhà quản lý hình học; đặt, lưới và gói chịu trách nhiệm kiểm soát kích thước và vị trí của từng widget trong giao diện.
Cài đặt
Các ràng buộc Ruby Tk được phân phối cùng với Ruby nhưng Tk là một bản cài đặt riêng biệt. Người dùng Windows có thể tải xuống bản cài đặt Tk bằng một cú nhấp chuột từ ActiveTcl của ActiveState .
Người dùng Mac và Linux có thể không cần cài đặt nó vì rất có thể nó đã được cài đặt cùng với OS nhưng nếu không, bạn có thể tải xuống các gói dựng sẵn hoặc lấy nguồn từ Tcl Developer Xchange .
Ứng dụng Tk đơn giản
Một cấu trúc điển hình cho các chương trình Ruby / Tk là tạo chính hoặc root cửa sổ (một phiên bản của TkRoot), thêm các widget vào đó để xây dựng giao diện người dùng, sau đó bắt đầu vòng lặp sự kiện chính bằng cách gọi Tk.mainloop.
Các truyền thống Hello, World! ví dụ cho Ruby / Tk trông giống như thế này -
require 'tk'
root = TkRoot.new { title "Hello, World!" }
TkLabel.new(root) do
text 'Hello, World!'
pack { padx 15 ; pady 15; side 'left' }
end
Tk.mainloop
Ở đây, sau khi tải mô-đun mở rộng tk, chúng tôi tạo một khung cấp gốc bằng TkRoot.new . Sau đó, chúng tôi tạo một widget TkLabel như một phần tử con của khung gốc, thiết lập một số tùy chọn cho nhãn. Cuối cùng, chúng tôi đóng gói khung gốc và nhập vòng lặp sự kiện GUI chính.
Nếu bạn chạy tập lệnh này, nó sẽ tạo ra kết quả sau:
Các lớp tiện ích Ruby / Tk
Có một danh sách các lớp Ruby / Tk khác nhau, có thể được sử dụng để tạo GUI mong muốn bằng Ruby / Tk.
TkFrame Tạo và điều khiển các widget khung.
TkButton Tạo và điều khiển các nút widget.
TkLabel Tạo và điều khiển các widget nhãn.
TkEntry Tạo và điều khiển các widget mục nhập.
TkCheckButton Tạo và điều khiển các widget nút kiểm tra .
TkRadioButton Tạo và điều khiển các widget của radiobutton.
TkListbox Tạo và điều khiển các widget trong hộp danh sách.
TkComboBox Tạo và điều khiển các widget của hộp danh sách.
TkMenu Tạo và điều khiển các widget menu.
TkMenubutton Tạo và điều khiển các tiện ích menubutton.
Tk.messageBox Tạo và điều khiển hộp thoại tin nhắn.
TkScrollbar Tạo và điều khiển các widget trên thanh cuộn.
TkCanvas Tạo và điều khiển các widget canvas.
TkScale Tạo và điều khiển các widget quy mô.
TkText Tạo và điều khiển các widget văn bản.
TkToplevel Tạo và điều khiển các widget cấp trên cùng.
TkSpinbox Tạo và điều khiển các tiện ích Spinbox.
TkProgressBar Tạo và điều khiển các widget của Thanh tiến trình.
Hộp thoại Tạo và điều khiển các tiện ích Hộp thoại.
Tk :: Tile :: Notebook Hiển thị một số cửa sổ trong không gian hạn chế với phép ẩn dụ sổ tay.
Tk :: Tile :: Paned Hiển thị một số cửa sổ con, xếp chồng lên nhau theo chiều dọc hoặc chiều ngang.
Tk :: Tile :: Dấu phân cách Hiển thị thanh phân cách ngang hoặc dọc.
Phông chữ Ruby / Tk, Màu sắc và Hình ảnh Hiểu về Phông chữ Ruby / Tk, Màu sắc và Hình ảnh
Tùy chọn cấu hình tiêu chuẩn
Tất cả các widget đều có một số tùy chọn cấu hình khác nhau, thường kiểm soát cách chúng được hiển thị hoặc cách chúng hoạt động. Tất nhiên, các tùy chọn có sẵn phụ thuộc vào loại widget.
Đây là danh sách tất cả các tùy chọn cấu hình tiêu chuẩn, có thể áp dụng cho bất kỳ tiện ích Ruby / Tk nào.
Sr.No. | Tùy chọn & Mô tả |
---|---|
1 | activebackground => Chuỗi Chỉ định màu nền để sử dụng khi vẽ các phần tử đang hoạt động. Một phần tử đang hoạt động nếu con trỏ chuột được định vị trên phần tử và việc nhấn nút chuột sẽ gây ra một số hành động. Bạn có thể sử dụng tên màu như "đỏ", "xanh dương", "hồng", "vàng", v.v. |
2 | activeborderwidth => Số nguyên Chỉ định giá trị không âm cho biết chiều rộng của đường viền 3-D được vẽ xung quanh các phần tử đang hoạt động. |
3 | activeforeground => Chuỗi Chỉ định màu nền trước để sử dụng khi vẽ các phần tử đang hoạt động. |
4 | anchor => Chuỗi Chỉ định cách thông tin trong tiện ích (ví dụ: văn bản hoặc bitmap) được hiển thị trong tiện ích. Phải là một trong các giá trịn, ne, e, se, s, sw, w, nw, hoặc là center. Ví dụ,nw có nghĩa là hiển thị thông tin sao cho góc trên cùng bên trái của nó nằm ở góc trên cùng bên trái của tiện ích con. |
5 | background or bg => Chuỗi Chỉ định màu nền bình thường để sử dụng khi hiển thị tiện ích. |
6 | bitmap => Bitmap Chỉ định một bitmap để hiển thị trong tiện ích. Cách chính xác mà bitmap được hiển thị có thể bị ảnh hưởng bởi các tùy chọn khác như neo hoặc justify. |
7 | borderwidth or bd => Số nguyên Chỉ định giá trị không âm cho biết chiều rộng của đường viền 3-D để vẽ xung quanh bên ngoài tiện ích. |
số 8 | compound => Chuỗi Chỉ định xem tiện ích có nên hiển thị văn bản và ảnh bitmap / hình ảnh cùng một lúc hay không và nếu có, vị trí bitmap / hình ảnh sẽ được đặt so với văn bản. Phải là một trong các giá trịnone, bottom, top, left, right, hoặc là center. |
9 | cursor => Chuỗi Chỉ định con trỏ chuột được sử dụng cho tiện ích. Các giá trị có thể có có thể là "watch", "arrow", v.v. |
10 | disabledforeground => Chuỗi Chỉ định màu nền trước để sử dụng khi vẽ một phần tử bị vô hiệu hóa. |
11 | exportselection => Boolean Chỉ định xem một lựa chọn trong tiện ích con có phải là lựa chọn X. Giá trị có thể có bất kỳtrue, false, 0, 1, yes, hoặc là no. Nếu lựa chọn được xuất, thì việc chọn trong tiện ích con sẽ bỏ chọn lựa chọn X hiện tại, chọn bên ngoài tiện ích con sẽ bỏ chọn bất kỳ lựa chọn tiện ích nào và tiện ích sẽ phản hồi các yêu cầu truy xuất lựa chọn khi có lựa chọn. |
12 | font => Chuỗi Chỉ định phông chữ để sử dụng khi vẽ văn bản bên trong tiện ích. |
13 | foreground or fg => Chuỗi Chỉ định màu nền trước bình thường để sử dụng khi hiển thị tiện ích con. |
14 | highlightbackground => Chuỗi Chỉ định màu để hiển thị trong vùng tô sáng ngang khi tiện ích con không có tiêu điểm đầu vào. |
15 | highlightcolor => Chuỗi Chỉ định màu để sử dụng cho hình chữ nhật đánh dấu ngang được vẽ xung quanh tiện ích con khi nó có tiêu điểm đầu vào. |
16 | highlightthickness => Số nguyên Chỉ định một giá trị không âm cho biết chiều rộng của hình chữ nhật đánh dấu để vẽ xung quanh bên ngoài tiện ích con khi nó có tiêu điểm đầu vào. |
17 | image => Hình ảnh Chỉ định một hình ảnh để hiển thị trong tiện ích con, hình ảnh này phải được tạo bằng tạo hình ảnh. Thông thường, nếu tùy chọn hình ảnh được chỉ định thì nó sẽ ghi đè các tùy chọn khác chỉ định một bitmap hoặc giá trị văn bản để hiển thị trong tiện ích con; tùy chọn hình ảnh có thể được đặt lại thành một chuỗi trống để bật lại hiển thị bitmap hoặc văn bản. |
18 | jump => Chuỗi Đối với các tiện ích con có thanh trượt có thể được kéo để điều chỉnh giá trị, chẳng hạn như thanh cuộn và tỷ lệ, tùy chọn này xác định thời điểm thông báo được thực hiện về các thay đổi trong giá trị. Giá trị của tùy chọn phải là boolean. Nếu giá trị là false, cập nhật được thực hiện liên tục khi thanh trượt được kéo. Nếu giá trị là true, các bản cập nhật sẽ bị trì hoãn cho đến khi thả nút chuột để kết thúc quá trình kéo; tại thời điểm đó, một thông báo duy nhất được thực hiện. |
19 | justify => Chuỗi Khi có nhiều dòng văn bản được hiển thị trong một widget, tùy chọn này sẽ xác định cách các dòng sắp xếp với nhau. Phải là một trong nhữngleft, center, hoặc là right. Left có nghĩa là các cạnh bên trái của các dòng đều thẳng hàng, center có nghĩa là tâm của các đường thẳng hàng và right nghĩa là các cạnh bên phải của đường thẳng hàng. |
20 | offset => Chuỗi Chỉ định độ lệch của các ô (xem thêm tileLựa chọn). Nó có thể có hai định dạng khác nhauoffset x,y hoặc là offset side, nơi có thể ở n, ne, e, se, s, sw, w, nw, hoặc là center. |
21 | orient => Chuỗi Đối với các tiện ích con có thể tự bố trí theo hướng ngang hoặc dọc, chẳng hạn như thanh cuộn, tùy chọn này chỉ định hướng nào nên được sử dụng. Phải là một trong haihorizontal hoặc là vertical hoặc chữ viết tắt của một trong số này. |
22 | padx => Số nguyên Chỉ định một giá trị không âm cho biết có bao nhiêu không gian thừa cần yêu cầu cho tiện ích con theo hướng X. |
23 | pady => Số nguyên Chỉ định một giá trị không âm cho biết có bao nhiêu không gian thừa cần yêu cầu cho tiện ích con theo hướng Y. |
24 | relief => Số nguyên Chỉ định hiệu ứng 3-D mong muốn cho tiện ích con. Giá trị được chấp nhận làraised, sunken, flat, ridgevà groove. |
25 | repeatdelay => Số nguyên Chỉ định số mili giây một nút hoặc phím phải được nhấn giữ trước khi nó bắt đầu tự động lặp lại. Ví dụ, được sử dụng trên các mũi tên lên và xuống trong thanh cuộn. |
26 | repeatinterval => Số nguyên Được sử dụng kết hợp với repeatdelay: khi tự động lặp lại bắt đầu, tùy chọn này xác định số mili giây giữa các lần tự động lặp lại |
27 | selectbackground => Chuỗi Chỉ định màu nền để sử dụng khi hiển thị các mục đã chọn. |
28 | selectborderwidth => Số nguyên Chỉ định một giá trị không âm cho biết chiều rộng của đường viền 3-D để vẽ xung quanh các mục đã chọn. |
29 | selectforeground => Chuỗi Chỉ định màu nền trước để sử dụng khi hiển thị các mục đã chọn. |
30 | setgrid => Boolean Chỉ định một giá trị boolean để xác định xem tiện ích con này có kiểm soát lưới thay đổi kích thước cho cửa sổ cấp cao nhất của nó hay không. Tùy chọn này thường được sử dụng trong các widget văn bản, trong đó thông tin trong widget có kích thước tự nhiên (kích thước của một ký tự) và nó có ý nghĩa đối với các kích thước của cửa sổ là số tích phân của các đơn vị này. |
31 | takefocus => Số nguyên Cung cấp thông tin được sử dụng khi di chuyển tiêu điểm từ cửa sổ này sang cửa sổ khác thông qua bàn phím (ví dụ: Tab và Shift-Tab). Trước khi đặt tiêu điểm cho một cửa sổ, trước tiên, các tập lệnh duyệt sẽ kiểm tra xem cửa sổ có thể xem được hay không (nó và tất cả tổ tiên của nó đã được ánh xạ); nếu không, cửa sổ bị bỏ qua. Giá trị 0 có nghĩa là cửa sổ này sẽ được bỏ qua hoàn toàn trong quá trình duyệt bàn phím. 1 có nghĩa là cửa sổ này phải luôn nhận tiêu điểm đầu vào. |
32 | text => Chuỗi Chỉ định một chuỗi sẽ được hiển thị bên trong tiện ích con. Cách mà chuỗi được hiển thị phụ thuộc vào tiện ích cụ thể và có thể được xác định bởi các tùy chọn khác, chẳng hạn nhưanchor hoặc là justify. |
33 | textvariable => Biến Chỉ định tên của một biến. Giá trị của biến là một chuỗi văn bản được hiển thị bên trong tiện ích con; nếu giá trị biến thay đổi thì tiện ích con sẽ tự động cập nhật để phản ánh giá trị mới. Cách mà chuỗi được hiển thị trong tiện ích phụ thuộc vào tiện ích cụ thể và có thể được xác định bởi các tùy chọn khác, chẳng hạn nhưanchor hoặc là justify. |
34 | tile => Hình ảnh Chỉ định hình ảnh được sử dụng để hiển thị tiện ích. Nếu hình ảnh là chuỗi trống, thì màu nền bình thường được hiển thị. |
35 | troughcolor => Chuỗi Chỉ định màu để sử dụng cho các khu vực đáy hình chữ nhật trong các tiện ích con như thanh cuộn và tỷ lệ. |
36 | troughtile => Hình ảnh Chỉ định hình ảnh được sử dụng để hiển thị trong các khu vực đáy hình chữ nhật trong các tiện ích con như thanh cuộn và tỷ lệ. |
37 | underline => Số nguyên Chỉ định chỉ số nguyên của một ký tự để gạch dưới trong tiện ích con. Tùy chọn này được sử dụng bởi các ràng buộc mặc định để triển khai tính năng duyệt bàn phím cho các nút menu và mục menu. 0 tương ứng với ký tự đầu tiên của văn bản được hiển thị trong tiện ích con, 1 đến ký tự tiếp theo, v.v. |
38 | wraplength => Số nguyên Đối với các widget có thể thực hiện gói từ, tùy chọn này chỉ định độ dài dòng tối đa. |
39 | xscrollcommand => chức năng Chỉ định một lệnh gọi lại được sử dụng để giao tiếp với các thanh cuộn ngang. |
40 | yscrollcommand => chức năng Chỉ định một lệnh gọi lại được sử dụng để giao tiếp với các thanh cuộn dọc. |
Quản lý hình học Ruby / Tk
Quản lý Hình học xử lý việc định vị các vật dụng khác nhau theo yêu cầu. Quản lý hình học trong Tk dựa trên khái niệm vật dụng chủ và phụ.
Cái chính là một tiện ích con, thường là một cửa sổ cấp cao nhất hoặc một khung, sẽ chứa các tiện ích con khác, được gọi là nô lệ. Bạn có thể coi trình quản lý hình học là người kiểm soát tiện ích chính và quyết định những gì sẽ được hiển thị bên trong.
Trình quản lý hình học sẽ hỏi từng tiện ích phụ về kích thước tự nhiên của nó hoặc kích thước lý tưởng mà nó muốn được hiển thị. Sau đó, nó lấy thông tin đó và kết hợp với bất kỳ tham số nào được cung cấp bởi chương trình khi nó yêu cầu trình quản lý hình học quản lý tiện ích phụ cụ thể đó.
Có ba trình quản lý hình học là place, grid và pack chịu trách nhiệm kiểm soát kích thước và vị trí của từng widget trong giao diện.
lưới Trình quản lý hình học sắp xếp các tiện ích con trong một lưới.
gói Trình quản lý hình học đóng gói xung quanh các cạnh của khoang.
đặt Trình quản lý hình học cho vị trí cố định hoặc tấm cao su.
Xử lý sự kiện Ruby / Tk
Ruby / Tk hỗ trợ vòng lặp sự kiện , nhận các sự kiện từ hệ điều hành. Đó là những thứ như nhấn nút, tổ hợp phím, di chuyển chuột, thay đổi kích thước cửa sổ, v.v.
Ruby / Tk sẽ quản lý vòng lặp sự kiện này cho bạn. Nó sẽ tìm ra tiện ích con nào áp dụng cho sự kiện (người dùng có nhấp vào nút này không? Nếu một phím được nhấn, hộp văn bản nào có tiêu điểm?) Và gửi nó cho phù hợp. Các widget riêng lẻ biết cách phản hồi các sự kiện, vì vậy, ví dụ: một nút có thể đổi màu khi chuột di chuyển qua nó và hoàn nguyên khi chuột rời đi.
Ở cấp độ cao hơn, Ruby / Tk gọi các lệnh gọi lại trong chương trình của bạn để chỉ ra rằng một điều gì đó quan trọng đã xảy ra với một tiện ích. Đối với cả hai trường hợp, bạn có thể cung cấp một khối mã hoặc một đối tượng Ruby Proc chỉ định cách ứng dụng phản hồi với sự kiện hoặc lệnh gọi lại.
Chúng ta hãy xem cách sử dụng phương thức bind để liên kết các sự kiện cơ bản của hệ thống cửa sổ với các thủ tục Ruby xử lý chúng. Hình thức ràng buộc đơn giản nhất lấy đầu vào của nó một chuỗi chỉ ra tên sự kiện và một khối mã mà Tk sử dụng để xử lý sự kiện.
Ví dụ: để bắt sự kiện ButtonRelease cho nút chuột đầu tiên trên một số tiện ích, bạn sẽ viết:
someWidget.bind('ButtonRelease-1') {
....code block to handle this event...
}
Tên sự kiện có thể bao gồm bổ sung và chi tiết. Công cụ sửa đổi là một chuỗi như Shift , Control hoặc Alt , cho biết rằng một trong các phím bổ trợ đã được nhấn.
Vì vậy, ví dụ: để bắt sự kiện được tạo ra khi người dùng giữ phím Ctrl và nhấp vào nút chuột phải.
someWidget.bind('Control-ButtonPress-3', proc { puts "Ouch!" })
Nhiều tiện ích con Ruby / Tk có thể kích hoạt lệnh gọi lại khi người dùng kích hoạt chúng và bạn có thể sử dụng lệnh gọi lại để chỉ định rằng một khối mã hoặc thủ tục nhất định được gọi khi điều đó xảy ra. Như đã thấy trước đó, bạn có thể chỉ định thủ tục gọi lại lệnh khi tạo tiện ích con -
helpButton = TkButton.new(buttonFrame) {
text "Help"
command proc { showHelp }
}
Hoặc bạn có thể gán nó sau bằng cách sử dụng phương thức lệnh của tiện ích con -
helpButton.command proc { showHelp }
Vì phương thức lệnh chấp nhận thủ tục hoặc khối mã, bạn cũng có thể viết ví dụ mã trước đó là:
helpButton = TkButton.new(buttonFrame) {
text "Help"
command { showHelp }
}
Sr.No. | Mô tả thẻ & sự kiện |
---|---|
1 | "1" (one) Nhấn nút trái chuột. |
2 | "ButtonPress-1" Nhấn nút trái chuột. |
3 | "Enter" Đã di chuyển chuột vào bên trong. |
4 | "Leave" Di chuyển chuột ra bên ngoài. |
5 | "Double-1" Đã nhấp đúp. |
6 | "B3-Motion" Nút bên phải kéo từ vị trí này sang vị trí khác. |
7 | Control-ButtonPress-3 Nút phải được nhấn cùng với phím Ctrl . |
số 8 | Alt-ButtonPress-1 Nút Let được nhấn cùng với Phím Alt . |
Phương pháp cấu hình
Các cấu hình phương pháp có thể được sử dụng để thiết lập và lấy bất kỳ giá trị cấu hình widget. Ví dụ, để thay đổi chiều rộng của một nút, bạn có thể gọi phương thức cấu hình bất kỳ lúc nào như sau:
require "tk"
button = TkButton.new {
text 'Hello World!'
pack
}
button.configure('activebackground', 'blue')
Tk.mainloop
Để nhận giá trị cho tiện ích con hiện tại, chỉ cần cung cấp cho nó mà không có giá trị như sau:
color = button.configure('activebackground')
Bạn cũng có thể gọi cấu hình mà không có bất kỳ tùy chọn nào, điều này sẽ cung cấp cho bạn danh sách tất cả các tùy chọn và giá trị của chúng.
Phương pháp cget
Để chỉ đơn giản là truy xuất giá trị của một tùy chọn, cấu hình trả về nhiều thông tin hơn bạn thường muốn. Phương thức cget chỉ trả về giá trị hiện tại.
color = button.cget('activebackground')