Đưa ra một bảng HTML [mã] trong một tệp hoặc tại một URL nhất định. Đầu tiên, tải tất cả các bảng HTML vào tập lệnh Python bằng cách gọi Pandas’
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']47 chuyển URL của tài liệu HTML. Kết quả là một danh sách các Khung dữ liệu, mỗi khung một bảng HTML trong tài liệu. Thứ hai, chuyển đổi bất kỳ DataFrame cụ thể nào thành CSV bằng cách gọi hàm
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']48
Đây là ví dụ chung, thay thế URL cụ thể của bạn và xuất tệp CSV
import pandas as pd html = '//en.wikipedia.org/wiki/Python_[programming_language]' csv = 'my_file.csv' # 1. Read all HTML tables from a given URL tables = pd.read_html[html] # 2. Write first table, for example, to the CSV file tables[0].to_csv[csv]
Ví dụ – Xuất bảng trang Wiki của Python sang CSV
Đưa ra bảng mô tả đầu tiên của trang wiki Python
Bạn chuyển đổi nó thành CSV bằng cách sử dụng phương pháp sau được nêu ở trên
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']
Vì vậy, về cơ bản, chúng tôi chuyển đổi bảng đầu vào sau [HTML]
đến đầu ra sau
Cách chuyển đổi bảng HTML trong tệp thành tệp CSV bằng Python
💬 Thử thách. Đưa ra một bảng HTML duy nhất được lưu trữ trong một tệp
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']49. Làm cách nào để chuyển đổi tệp bảng đó thành tệp CSV bằng Python?
Hàm
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']50 hoạt động nếu bạn sử dụng đường dẫn tệp hoặc URL làm đối số. Để chuyển đổi tệp bảng HTML
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']49 thành tệp CSV
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']52 bằng Python, hãy làm theo ba bước sau
- Nhập thư viện gấu trúc
- Đọc bảng HTML dưới dạng DataFrame
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']
53 bằng cách gọiimport pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']
0 - Ghi DataFrame vào CSV bằng cách gọi
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']
1 nếu bạn không cần chỉ mục số hàng
Đây là mã cụ thể hoạt động
import pandas as pd # Select the only [first] table using indexing [0] df = pd.read_html['my_file.html'][0] # Write DataFrame to CSV - no index required df.to_csv['my_file.csv', index=False]
Đây là tệp bảng HTML gốc
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']49
Đây là tệp CSV đã chuyển đổi
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']52
Đọc thêm
Bạn có thể tìm hiểu thêm về cách đọc bảng HTML vào Khung dữ liệu Pandas trong bài viết sau
🌍 Tài nguyên được đề xuất. Cách đọc bảng HTML với Pandas
Chris
Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính
Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới
Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây
Gói
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 [“Giao diện Tk”] là giao diện Python tiêu chuẩn cho bộ công cụ Tcl/Tk GUI. Cả Tk và
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 đều khả dụng trên hầu hết các nền tảng Unix, bao gồm cả macOS, cũng như trên các hệ thống Windows
Chạy
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 03 từ dòng lệnh sẽ mở ra một cửa sổ hiển thị giao diện Tk đơn giản, cho bạn biết rằng
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 đã được cài đặt đúng cách trên hệ thống của bạn và cũng hiển thị phiên bản Tcl/Tk nào được cài đặt, vì vậy bạn có thể đọc tài liệu cụ thể về Tcl/Tk
Tkinter hỗ trợ nhiều phiên bản Tcl/Tk, được xây dựng có hoặc không có hỗ trợ luồng. Gói phát hành nhị phân Python chính thức Tcl/Tk 8. 6 luồng. Xem mã nguồn cho mô-đun
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 05 để biết thêm thông tin về các phiên bản được hỗ trợ
Tkinter không phải là một trình bao bọc mỏng, nhưng bổ sung một lượng hợp lý logic của riêng nó để làm cho trải nghiệm trở nên Pythonic hơn. Tài liệu này sẽ tập trung vào những bổ sung và thay đổi này, đồng thời tham khảo tài liệu Tcl/Tk chính thức để biết chi tiết không thay đổi
Ghi chú
Tcl/Tk 8. 5 [2007] đã giới thiệu một bộ thành phần giao diện người dùng theo chủ đề hiện đại cùng với một API mới để sử dụng chúng. Cả API cũ và mới vẫn khả dụng. Hầu hết các tài liệu bạn sẽ tìm thấy trực tuyến vẫn sử dụng API cũ và có thể đã lỗi thời
Xem thêm
- TkDocs
Hướng dẫn mở rộng về cách tạo giao diện người dùng với Tkinter. Giải thích các khái niệm chính và minh họa các phương pháp được đề xuất bằng API hiện đại
- Tkinter 8. 5 tài liệu tham khảo. GUI cho Python
Tài liệu tham khảo cho Tkinter 8. 5 chi tiết các lớp, phương thức và tùy chọn có sẵn
Tài nguyên Tcl/Tk
- lệnh tk
Tham chiếu toàn diện đến từng lệnh Tcl/Tk cơ bản được sử dụng bởi Tkinter
- Trang chủ Tcl/Tk
Tài liệu bổ sung và liên kết đến phát triển cốt lõi Tcl/Tk
Sách
- Tkinter hiện đại dành cho các nhà phát triển Python bận rộn
Bởi Mark Roseman. [ISBN 978-1999149567]
- Lập trình Python và Tkinter
Bởi Alan Moore. [ISBN 978-1788835886]
- Lập trình Python
Bởi Mark Lutz; . [ISBN 978-0596158101]
- Tcl và Bộ công cụ Tk [tái bản lần 2]
Bởi John Ousterhout, người phát minh ra Tcl/Tk, và Ken Jones; . [ISBN 978-0321336330]
Ngành kiến trúc¶
Tcl/Tk không phải là một thư viện đơn lẻ mà bao gồm một vài mô-đun riêng biệt, mỗi mô-đun có chức năng riêng biệt và tài liệu chính thức của riêng nó. Các bản phát hành nhị phân của Python cũng gửi một mô-đun bổ trợ cùng với nó
tclTcl là một ngôn ngữ lập trình được giải thích động, giống như Python. Mặc dù nó có thể được sử dụng riêng như một ngôn ngữ lập trình có mục đích chung, nhưng nó thường được nhúng vào các ứng dụng C dưới dạng công cụ tạo tập lệnh hoặc giao diện cho bộ công cụ Tk. Thư viện Tcl có giao diện C để tạo và quản lý một hoặc nhiều phiên bản của trình thông dịch Tcl, chạy các lệnh và tập lệnh Tcl trong các phiên bản đó và thêm các lệnh tùy chỉnh được triển khai trong Tcl hoặc C. Mỗi trình thông dịch có một hàng đợi sự kiện và có các phương tiện để gửi các sự kiện tới nó và xử lý chúng. Không giống như Python, mô hình thực thi của Tcl được thiết kế xung quanh đa nhiệm hợp tác và Tkinter khắc phục sự khác biệt này [xem Mô hình phân luồng để biết chi tiết]
TKTk là gói Tcl được triển khai trong C có thêm các lệnh tùy chỉnh để tạo và thao tác với các tiện ích GUI. Mỗi đối tượng
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06 nhúng phiên bản trình thông dịch Tcl của chính nó với Tk được tải vào nó. Các tiện ích của Tk rất có thể tùy chỉnh, mặc dù phải trả giá bằng giao diện lỗi thời. Tk sử dụng hàng đợi sự kiện của Tcl để tạo và xử lý các sự kiện GUITtk
Tk theo chủ đề [Ttk] là một nhóm tiện ích Tk mới hơn cung cấp giao diện đẹp hơn nhiều trên các nền tảng khác nhau so với nhiều tiện ích Tk cổ điển. Ttk được phân phối như một phần của Tk, bắt đầu với Tk phiên bản 8. 5. Các liên kết Python được cung cấp trong một mô-đun riêng biệt,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 07
Trong nội bộ, Tk và Ttk sử dụng các tiện ích của hệ điều hành cơ bản, i. e. , Xlib trên Unix/X11, Cocoa trên macOS, GDI trên Windows
Khi ứng dụng Python của bạn sử dụng một lớp trong Tkinter, e. g. , để tạo một tiện ích, trước tiên mô-đun
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 sẽ tập hợp một chuỗi lệnh Tcl/Tk. Nó chuyển chuỗi lệnh Tcl đó tới một mô-đun nhị phân
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 05 bên trong, sau đó gọi trình thông dịch Tcl để đánh giá nó. Sau đó, trình thông dịch Tcl sẽ gọi các gói Tk và/hoặc Ttk, từ đó sẽ thực hiện các lệnh gọi đến Xlib, Cocoa hoặc GDI
Mô-đun Tkinter¶
Hỗ trợ cho Tkinter được trải rộng trên một số mô-đun. Hầu hết các ứng dụng sẽ cần mô-đun chính
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00, cũng như mô-đun
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 07, cung cấp API và bộ widget theo chủ đề hiện đại
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']6lớp tkinter. Tk[screenName=Không có, baseName=None, className='Tk', useTk=True, sync=False, use=None]¶
Xây dựng tiện ích Tk cấp cao nhất, thường là cửa sổ chính của ứng dụng và khởi tạo trình thông dịch Tcl cho tiện ích này. Mỗi phiên bản có trình thông dịch Tcl được liên kết riêng
Lớp
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06 thường được khởi tạo bằng cách sử dụng tất cả các giá trị mặc định. Tuy nhiên, các đối số từ khóa sau hiện được công nhậnTên hiển thị
Khi được cung cấp [dưới dạng chuỗi], hãy đặt biến môi trường
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']83. [chỉ dành cho X11]baseName
Tên tệp hồ sơ. Theo mặc định, baseName được lấy từ tên chương trình [
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']84]tên lớp
Tên của lớp widget. Được sử dụng làm tệp hồ sơ và cũng là tên mà Tcl được gọi [argv0 trong interp]
sử dụngTkNếu
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']85, khởi tạo hệ thống con Tk. Hàm
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']86 đặt giá trị này thành
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']87đồng bộ hóa
Nếu
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']85, hãy thực hiện đồng bộ tất cả các lệnh của máy chủ X để báo cáo lỗi ngay lập tức. Có thể được sử dụng để gỡ lỗi. [chỉ dành cho X11]sử dụng
Chỉ định id của cửa sổ để nhúng ứng dụng, thay vì nó được tạo dưới dạng cửa sổ cấp cao nhất độc lập. id phải được chỉ định theo cách giống như giá trị cho tùy chọn -use cho các tiện ích cấp cao nhất [nghĩa là nó có dạng giống như được trả về bởi
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']89]
Lưu ý rằng trên một số nền tảng, điều này sẽ chỉ hoạt động chính xác nếu id đề cập đến khung Tk hoặc cấp cao nhất đã bật tùy chọn -container của nó
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06 đọc và giải thích các tệp hồ sơ, có tên là
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']61 và
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']62, vào trình thông dịch Tcl và gọi
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']63 về nội dung của
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']64 và
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']65. Đường dẫn cho các tệp hồ sơ là biến môi trường
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']66 hoặc, nếu điều đó không được xác định, thì
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']67đến ¶
Đối tượng ứng dụng Tk được tạo bằng cách khởi tạo
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06. Điều này cung cấp quyền truy cập vào trình thông dịch Tcl. Mỗi tiện ích được đính kèm cùng một phiên bản của
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06 có cùng giá trị cho thuộc tính
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']50 của nóchính chủ ¶
Đối tượng widget chứa widget này. Đối với
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06, cái chính là
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']52 vì nó là cửa sổ chính. Các thuật ngữ chính và cha mẹ tương tự nhau và đôi khi được sử dụng thay thế cho nhau làm tên đối số; . cha/con phản ánh mối quan hệ dạng cây trong khi chủ/tớ phản ánh cấu trúc vùng chứatrẻ em ¶
Hậu duệ trực tiếp của tiện ích con này dưới dạng
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']55 với tên tiện ích con là khóa và đối tượng thể hiện con là giá trịtkinter. Tcl[screenName=Không có, baseName=None, className='Tk', useTk=False]¶
Hàm
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']56 là một hàm xuất xưởng tạo ra một đối tượng giống như được tạo bởi lớp
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06, ngoại trừ việc nó không khởi tạo hệ thống con Tk. Điều này thường hữu ích nhất khi điều khiển trình thông dịch Tcl trong một môi trường mà người ta không muốn tạo các cửa sổ cấp trên không liên quan hoặc khi người ta không thể [chẳng hạn như các hệ thống Unix/Linux không có máy chủ X]. Một đối tượng được tạo bởi đối tượng
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']56 có thể tạo một cửa sổ Toplevel [và khởi tạo hệ thống con Tk] bằng cách gọi phương thức
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']59 của nó
Các mô-đun cung cấp hỗ trợ Tk bao gồm
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00
Mô-đun Tkinter chính
import pandas as pd # Select the only [first] table using indexing [0] df = pd.read_html['my_file.html'][0] # Write DataFrame to CSV - no index required df.to_csv['my_file.csv', index=False]61
Hộp thoại cho phép người dùng chọn màu
import pandas as pd # Select the only [first] table using indexing [0] df = pd.read_html['my_file.html'][0] # Write DataFrame to CSV - no index required df.to_csv['my_file.csv', index=False]62
Lớp cơ sở cho các hộp thoại được định nghĩa trong các mô-đun khác được liệt kê tại đây
import pandas as pd # Select the only [first] table using indexing [0] df = pd.read_html['my_file.html'][0] # Write DataFrame to CSV - no index required df.to_csv['my_file.csv', index=False]63
Các hộp thoại phổ biến để cho phép người dùng chỉ định tệp để mở hoặc lưu
import pandas as pd # Select the only [first] table using indexing [0] df = pd.read_html['my_file.html'][0] # Write DataFrame to CSV - no index required df.to_csv['my_file.csv', index=False]64
Các tiện ích hỗ trợ làm việc với phông chữ
import pandas as pd # Select the only [first] table using indexing [0] df = pd.read_html['my_file.html'][0] # Write DataFrame to CSV - no index required df.to_csv['my_file.csv', index=False]65
Truy cập vào hộp thoại Tk tiêu chuẩn
import pandas as pd # Select the only [first] table using indexing [0] df = pd.read_html['my_file.html'][0] # Write DataFrame to CSV - no index required df.to_csv['my_file.csv', index=False]66
Tiện ích văn bản có thanh cuộn dọc được tích hợp sẵn
import pandas as pd # Select the only [first] table using indexing [0] df = pd.read_html['my_file.html'][0] # Write DataFrame to CSV - no index required df.to_csv['my_file.csv', index=False]67
Hộp thoại cơ bản và chức năng tiện lợi
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 07
Bộ tiện ích theo chủ đề được giới thiệu trong Tk 8. 5, cung cấp các lựa chọn thay thế hiện đại cho nhiều tiện ích cổ điển trong mô-đun chính
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00
mô-đun bổ sung
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 05
Mô-đun nhị phân chứa giao diện cấp thấp tới Tcl/Tk. Nó được nhập tự động bởi mô-đun chính
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 và không bao giờ được sử dụng trực tiếp bởi các lập trình viên ứng dụng. Nó thường là một thư viện dùng chung [hoặc DLL], nhưng trong một số trường hợp có thể được liên kết tĩnh với trình thông dịch Python
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 072
Môi trường học tập và phát triển tích hợp của Python [IDLE]. Dựa trên
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 074
Các hằng ký hiệu có thể được sử dụng thay cho các chuỗi khi truyền các tham số khác nhau cho các lệnh gọi Tkinter. Được nhập tự động bởi mô-đun
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 chính
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 076
[thử nghiệm] Hỗ trợ kéo và thả cho
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00. Điều này sẽ không còn được dùng nữa khi nó được thay thế bằng Tk DND
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 078
[không dùng nữa] Gói Tcl/Tk của bên thứ ba cũ hơn có thêm một số tiện ích con mới. Các lựa chọn thay thế tốt hơn cho hầu hết có thể được tìm thấy trong
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 07
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 050
Đồ họa con rùa trong cửa sổ Tk
Tkinter Life Preserve¶
Phần này không được thiết kế để trở thành một hướng dẫn toàn diện về Tk hoặc Tkinter. Đối với điều đó, hãy tham khảo một trong những nguồn bên ngoài đã lưu ý trước đó. Thay vào đó, phần này cung cấp định hướng rất nhanh về ứng dụng Tkinter trông như thế nào, xác định các khái niệm Tk cơ bản và giải thích cách cấu trúc trình bao bọc Tkinter
Phần còn lại của phần này sẽ giúp bạn xác định các lớp, phương thức và tùy chọn mà bạn sẽ cần trong ứng dụng Tkinter của mình và nơi tìm tài liệu chi tiết hơn về chúng, bao gồm cả tài liệu tham khảo chính thức về Tcl/Tk
Chương trình Hello World¶
Chúng ta sẽ bắt đầu bằng cách xem qua ứng dụng “Xin chào thế giới” trong Tkinter. Đây không phải là cái nhỏ nhất mà chúng tôi có thể viết, nhưng đủ để minh họa một số khái niệm chính mà bạn cần biết
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06
Sau khi nhập, dòng tiếp theo tạo một thể hiện của lớp
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06, lớp này khởi tạo Tk và tạo trình thông dịch Tcl liên quan của nó. Nó cũng tạo ra một cửa sổ cấp cao nhất, được gọi là cửa sổ gốc, đóng vai trò là cửa sổ chính của ứng dụng
Dòng sau tạo một tiện ích khung, trong trường hợp này sẽ chứa nhãn và nút mà chúng tôi sẽ tạo tiếp theo. Khung vừa với bên trong cửa sổ gốc
Dòng tiếp theo tạo tiện ích nhãn chứa chuỗi văn bản tĩnh. Phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 052 được sử dụng để chỉ định bố cục [vị trí] tương đối của nhãn trong tiện ích khung chứa nó, tương tự như cách các bảng trong HTML hoạt động
Sau đó, một tiện ích nút được tạo và đặt ở bên phải của nhãn. Khi được nhấn, nó sẽ gọi phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 053 của cửa sổ gốc
Cuối cùng, phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 054 đặt mọi thứ trên màn hình và phản hồi đầu vào của người dùng cho đến khi chương trình kết thúc
Khái niệm Tk quan trọng¶
Ngay cả chương trình đơn giản này cũng minh họa các khái niệm Tk chính sau đây
vật dụngGiao diện người dùng Tkinter được tạo thành từ các widget riêng lẻ. Mỗi widget được biểu diễn dưới dạng một đối tượng Python, được khởi tạo từ các lớp như
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 055,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 056 và
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 057phân cấp phụ tùng
Các widget được sắp xếp theo thứ bậc. Nhãn và nút được chứa trong một khung, do đó được chứa trong cửa sổ gốc. Khi tạo từng tiện ích con, tiện ích con của nó được chuyển làm đối số đầu tiên cho hàm tạo tiện ích con
Tùy chọn cấu hìnhWidget có các tùy chọn cấu hình, giúp sửa đổi giao diện và hành vi của chúng, chẳng hạn như văn bản sẽ hiển thị trong nhãn hoặc nút. Các lớp vật dụng khác nhau sẽ có các bộ tùy chọn khác nhau
quản lý hình họcWidget không tự động được thêm vào giao diện người dùng khi chúng được tạo. Trình quản lý hình học như
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 058 kiểm soát vị trí đặt chúng trong giao diện người dùngvòng lặp sự kiện
Tkinter phản ứng với đầu vào của người dùng, thay đổi từ chương trình của bạn và thậm chí chỉ làm mới màn hình khi chủ động chạy một vòng lặp sự kiện. Nếu chương trình của bạn không chạy vòng lặp sự kiện, giao diện người dùng của bạn sẽ không cập nhật
Hiểu cách Tkinter kết thúc Tcl/Tk¶
Khi ứng dụng của bạn sử dụng các lớp và phương thức của Tkinter, bên trong Tkinter sẽ tập hợp các chuỗi đại diện cho các lệnh Tcl/Tk và thực thi các lệnh đó trong trình thông dịch Tcl được đính kèm với phiên bản
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06 của ứng dụng của bạn
Cho dù đó là cố gắng điều hướng tài liệu tham khảo, cố gắng tìm phương pháp hoặc tùy chọn phù hợp, điều chỉnh một số mã hiện có hoặc gỡ lỗi ứng dụng Tkinter của bạn, đôi khi sẽ rất hữu ích khi hiểu các lệnh Tcl/Tk cơ bản đó trông như thế nào
Để minh họa, đây là Tcl/Tk tương đương với phần chính của tập lệnh Tkinter ở trên
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
Cú pháp của Tcl tương tự như nhiều ngôn ngữ shell, trong đó từ đầu tiên là lệnh sẽ được thực thi, với các đối số cho lệnh đó theo sau nó, được phân tách bằng dấu cách. Không đi sâu vào quá nhiều chi tiết, hãy chú ý những điều sau
Các lệnh dùng để tạo widget [như
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
70] tương ứng với các lớp widget trong TkinterCác tùy chọn tiện ích Tcl [như
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
71] tương ứng với các đối số từ khóa trong TkinterWidget được gọi bằng tên đường dẫn trong Tcl [như
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
72], trong khi Tkinter không sử dụng tên nhưng tham chiếu đối tượngVị trí của tiện ích trong hệ thống phân cấp tiện ích được mã hóa trong tên đường dẫn [phân cấp] của nó, sử dụng
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
73 [dấu chấm] làm dấu phân cách đường dẫn. Tên đường dẫn cho cửa sổ gốc chỉ làttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
73 [dấu chấm]. Trong Tkinter, hệ thống phân cấp được xác định không phải theo tên đường dẫn mà bằng cách chỉ định tiện ích mẹ khi tạo từng tiện ích conCác hoạt động được triển khai dưới dạng các lệnh riêng biệt trong Tcl [như
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
58 hoặcttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
76] được biểu diễn dưới dạng các phương thức trên các đối tượng tiện ích Tkinter. Như bạn sẽ thấy ngay sau đây, vào những thời điểm khác, Tcl sử dụng những gì có vẻ như là các lệnh gọi phương thức trên các đối tượng widget, phản ánh chính xác hơn những gì sẽ được sử dụng trong Tkinter
Làm thế nào để tôi…?
Nếu bạn không chắc chắn cách thực hiện điều gì đó trong Tkinter và bạn không thể tìm thấy nó ngay lập tức trong hướng dẫn hoặc tài liệu tham khảo mà bạn đang sử dụng, thì có một số chiến lược có thể hữu ích
Đầu tiên, hãy nhớ rằng các chi tiết về cách thức hoạt động của từng widget có thể khác nhau giữa các phiên bản khác nhau của cả Tkinter và Tcl/Tk. Nếu bạn đang tìm kiếm tài liệu, hãy đảm bảo tài liệu đó tương ứng với phiên bản Python và Tcl/Tk được cài đặt trên hệ thống của bạn
Khi tìm kiếm cách sử dụng API, sẽ giúp bạn biết tên chính xác của lớp, tùy chọn hoặc phương thức mà bạn đang sử dụng. Xem xét nội tâm, trong trình bao Python tương tác hoặc với
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 077, có thể giúp bạn xác định những gì bạn cần
Để tìm hiểu những tùy chọn cấu hình nào có sẵn trên bất kỳ tiện ích con nào, hãy gọi phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 078 của nó, phương thức này trả về một từ điển chứa nhiều thông tin về từng đối tượng, bao gồm các giá trị mặc định và hiện tại của nó. Sử dụng
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 079 để chỉ lấy tên của từng tùy chọn
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']8
Vì hầu hết các widget đều có nhiều tùy chọn cấu hình chung, nên có thể hữu ích khi tìm ra cái nào dành riêng cho một lớp widget cụ thể. So sánh danh sách các tùy chọn với danh sách của một tiện ích con đơn giản hơn, chẳng hạn như khung, là một cách để thực hiện điều đó
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']6
Tương tự, bạn có thể tìm các phương thức khả dụng cho một đối tượng widget bằng cách sử dụng hàm tiêu chuẩn
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0600. Nếu dùng thử, bạn sẽ thấy có hơn 200 phương thức widget phổ biến, do đó, việc xác định lại những phương thức cụ thể cho một lớp widget là rất hữu ích
import pandas as pd # 1. Read all HTML tables from a given URL tables = pd.read_html['//en.wikipedia.org/wiki/Python_[programming_language]'] # 2. Write first table, for example, to the CSV file tables[0].to_csv['my_file.csv']5
Điều hướng Hướng dẫn tham khảo Tcl/Tk¶
Như đã lưu ý, hướng dẫn tham khảo lệnh Tk chính thức [trang hướng dẫn] thường là mô tả chính xác nhất về những hoạt động cụ thể trên các widget thực hiện. Ngay cả khi bạn biết tên của tùy chọn hoặc phương pháp mà bạn cần, bạn vẫn có thể có một vài nơi để tìm
Mặc dù tất cả các thao tác trong Tkinter được triển khai dưới dạng các lệnh gọi phương thức trên các đối tượng widget, nhưng bạn đã thấy rằng nhiều thao tác Tcl/Tk xuất hiện dưới dạng các lệnh lấy tên đường dẫn widget làm tham số đầu tiên, theo sau là các tham số tùy chọn, e. g
import pandas as pd # Select the only [first] table using indexing [0] df = pd.read_html['my_file.html'][0] # Write DataFrame to CSV - no index required df.to_csv['my_file.csv', index=False]6
Tuy nhiên, các phương thức khác trông giống như các phương thức được gọi trên một đối tượng tiện ích [thực tế, khi bạn tạo một tiện ích trong Tcl/Tk, nó sẽ tạo một lệnh Tcl với tên của tên đường dẫn tiện ích, với tham số đầu tiên cho lệnh đó là tên
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 07
Trong tài liệu tham khảo Tcl/Tk chính thức, bạn sẽ tìm thấy hầu hết các hoạt động trông giống như lệnh gọi phương thức trên trang hướng dẫn cho một tiện ích con cụ thể [e. g. , bạn sẽ tìm thấy phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0601 trên ttk. trang man của nút], trong khi các chức năng lấy tiện ích con làm tham số thường có trang man của riêng chúng [e. g. , lưới]
Bạn sẽ tìm thấy nhiều tùy chọn và phương pháp phổ biến trong tùy chọn hoặc ttk. các trang man widget, trong khi những trang khác được tìm thấy trong trang man cho một lớp widget cụ thể
Bạn cũng sẽ thấy rằng nhiều phương thức Tkinter có tên ghép, e. g. , ________ 6602, ________ 6603, ________ 6604. Bạn sẽ tìm thấy tài liệu cho tất cả những thứ này trong trang man winfo
Ghi chú
Hơi khó hiểu, cũng có những phương thức trên tất cả các tiện ích Tkinter không thực sự hoạt động trên tiện ích đó mà hoạt động ở phạm vi toàn cầu, không phụ thuộc vào bất kỳ tiện ích nào. Ví dụ là các phương thức truy cập khay nhớ tạm hoặc chuông hệ thống. [Chúng tình cờ được triển khai dưới dạng các phương thức trong lớp cơ sở
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0605 mà tất cả các tiện ích Tkinter kế thừa từ đó]
Mô hình ren¶
Python và Tcl/Tk có các mô hình luồng rất khác nhau, mà
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 cố gắng kết nối. Nếu bạn sử dụng chủ đề, bạn có thể cần lưu ý điều này
Trình thông dịch Python có thể có nhiều luồng liên kết với nó. Trong Tcl, nhiều luồng có thể được tạo, nhưng mỗi luồng có một phiên bản trình thông dịch Tcl riêng được liên kết với nó. Các luồng cũng có thể tạo nhiều hơn một phiên bản trình thông dịch, mặc dù mỗi phiên bản trình thông dịch chỉ có thể được sử dụng bởi một luồng đã tạo ra nó
Mỗi đối tượng
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06 được tạo bởi
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 chứa một trình thông dịch Tcl. Nó cũng theo dõi luồng nào đã tạo trình thông dịch đó. Các cuộc gọi tới
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 có thể được thực hiện từ bất kỳ chuỗi Python nào. Trong nội bộ, nếu một cuộc gọi đến từ một luồng khác với luồng đã tạo đối tượng
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06, thì một sự kiện sẽ được đăng lên hàng đợi sự kiện của trình thông dịch và khi được thực thi, kết quả sẽ được trả về luồng Python đang gọi
Các ứng dụng Tcl/Tk thường được điều khiển theo sự kiện, nghĩa là sau khi khởi tạo, trình thông dịch sẽ chạy một vòng lặp sự kiện [i. e.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0611] và phản hồi các sự kiện. Bởi vì nó là một luồng, các trình xử lý sự kiện phải phản hồi nhanh chóng, nếu không chúng sẽ chặn các sự kiện khác được xử lý. Để tránh điều này, mọi tính toán chạy dài không được chạy trong trình xử lý sự kiện mà được chia thành các phần nhỏ hơn bằng cách sử dụng bộ hẹn giờ hoặc chạy trong một chuỗi khác. Điều này khác với nhiều bộ công cụ GUI trong đó GUI chạy trong một luồng hoàn toàn riêng biệt với tất cả mã ứng dụng bao gồm cả trình xử lý sự kiện
Nếu trình thông dịch Tcl không chạy vòng lặp sự kiện và xử lý các sự kiện, bất kỳ cuộc gọi
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 nào được thực hiện từ các luồng khác với luồng đang chạy trình thông dịch Tcl sẽ không thành công
Một số trường hợp đặc biệt tồn tại
Các thư viện Tcl/Tk có thể được xây dựng để chúng không nhận biết luồng. Trong trường hợp này,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 gọi thư viện từ luồng Python ban đầu, ngay cả khi luồng này khác với luồng đã tạo trình thông dịch Tcl. Khóa toàn cầu đảm bảo chỉ có một cuộc gọi xảy ra tại một thời điểmMặc dù
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 cho phép bạn tạo nhiều hơn một phiên bản của đối tượngttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06 [với trình thông dịch riêng của nó], nhưng tất cả các trình thông dịch là một phần của cùng một chuỗi chia sẻ một hàng đợi sự kiện chung, điều này sẽ trở nên xấu xí nhanh chóng. Trong thực tế, không tạo nhiều phiên bản củattk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 06 cùng một lúc. Mặt khác, tốt nhất là tạo chúng trong các luồng riêng biệt và đảm bảo bạn đang chạy bản dựng Tcl/Tk nhận biết luồngChặn trình xử lý sự kiện không phải là cách duy nhất để ngăn trình thông dịch Tcl nhập lại vòng lặp sự kiện. Thậm chí có thể chạy nhiều vòng lặp sự kiện lồng nhau hoặc bỏ hoàn toàn vòng lặp sự kiện. Nếu bạn đang làm bất cứ điều gì khó khăn khi nói đến các sự kiện hoặc chủ đề, hãy lưu ý những khả năng này
Có một vài hàm
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 chọn lọc hiện chỉ hoạt động khi được gọi từ luồng đã tạo trình thông dịch Tcl
Tài liệu tham khảo hữu ích¶
Tùy chọn cài đặt¶
Tùy chọn kiểm soát những thứ như màu sắc và độ rộng đường viền của tiện ích con. Các tùy chọn có thể được đặt theo ba cách
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 05Sau khi tạo đối tượng, coi tên tùy chọn giống như một chỉ mục từ điển
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 07Sử dụng phương thức config[] để cập nhật nhiều attr sau khi tạo đối tượng
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 060
Để có giải thích đầy đủ về một tùy chọn nhất định và hành vi của nó, hãy xem các trang hướng dẫn Tk cho tiện ích được đề cập
Lưu ý rằng các trang hướng dẫn liệt kê “TÙY CHỌN TIÊU CHUẨN” và “TÙY CHỌN CỤ THỂ TIỆN ÍCH” cho mỗi tiện ích con. Cái trước là danh sách các tùy chọn chung cho nhiều tiện ích, cái sau là các tùy chọn mang phong cách riêng cho tiện ích cụ thể đó. Tùy chọn tiêu chuẩn được ghi lại trên trang hướng dẫn tùy chọn [3]
Không có sự phân biệt giữa các tùy chọn tiêu chuẩn và tùy chọn cụ thể trong tài liệu này. Một số tùy chọn không áp dụng cho một số loại vật dụng. Việc một tiện ích cụ thể có đáp ứng với một tùy chọn cụ thể hay không tùy thuộc vào loại của tiện ích con;
Các tùy chọn được hỗ trợ bởi một tiện ích nhất định được liệt kê trong trang hướng dẫn của tiện ích đó hoặc có thể được truy vấn trong thời gian chạy bằng cách gọi phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0619 mà không có đối số hoặc bằng cách gọi phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 079 trên tiện ích đó. Giá trị trả về của các cuộc gọi này là một từ điển có khóa là tên của tùy chọn dưới dạng chuỗi [ví dụ:
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0621] và có giá trị là 5 bộ
Một số tùy chọn, như
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0622 là từ đồng nghĩa với các tùy chọn phổ biến có tên dài [
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0622 là cách viết tắt của “nền”]. Truyền phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0619, tên của tùy chọn tốc ký sẽ trả về 2-tuple, không phải 5-tuple. 2-tuple được trả lại sẽ chứa tên của từ đồng nghĩa và tùy chọn “thực” [chẳng hạn như
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0625]
Mục lục
Nghĩa
Thí dụ
0
tên tùy chọn
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0621
1
tên tùy chọn để tra cứu cơ sở dữ liệu
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0621
2
lớp tùy chọn để tra cứu cơ sở dữ liệu
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0628
3
giá trị mặc định
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0629
4
giá trị hiện tại
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0630
Thí dụ
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 061
Tất nhiên, từ điển được in sẽ bao gồm tất cả các tùy chọn có sẵn và giá trị của chúng. Điều này chỉ có nghĩa là một ví dụ
Người đóng gói¶
Trình đóng gói là một trong những cơ chế quản lý hình học của Tk. Trình quản lý hình học được sử dụng để chỉ định vị trí tương đối của các tiện ích trong vùng chứa của chúng - trình quản lý chung của chúng. Trái ngược với trình đặt chỉ định rườm rà hơn [được sử dụng ít phổ biến hơn và chúng tôi không trình bày ở đây], trình đóng gói lấy đặc tả mối quan hệ định tính - bên trên, bên trái, điền, v.v. - và xử lý mọi thứ để xác định tọa độ vị trí chính xác
Kích thước của bất kỳ tiện ích chính nào được xác định bởi kích thước của "tiện ích phụ" bên trong. Trình đóng gói được sử dụng để kiểm soát nơi các tiện ích phụ xuất hiện bên trong bản gốc mà chúng được đóng gói. Bạn có thể đóng gói các tiện ích vào các khung và các khung này vào các khung khác để đạt được kiểu bố cục mà bạn mong muốn. Ngoài ra, sự sắp xếp được tự động điều chỉnh để phù hợp với những thay đổi gia tăng đối với cấu hình, sau khi nó được đóng gói.
Lưu ý rằng các vật dụng không xuất hiện cho đến khi chúng được chỉ định hình học với trình quản lý hình học. Một sai lầm phổ biến ban đầu là bỏ qua đặc tả hình học, và sau đó ngạc nhiên khi tiện ích được tạo nhưng không có gì xuất hiện. Một widget sẽ chỉ xuất hiện sau khi nó đã được áp dụng phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0631 của trình đóng gói cho nó chẳng hạn
Phương thức pack[] có thể được gọi với các cặp từ khóa-tùy chọn/giá trị kiểm soát vị trí tiện ích sẽ xuất hiện trong vùng chứa của nó và cách hoạt động của nó khi cửa sổ ứng dụng chính được thay đổi kích thước. Dưới đây là một số ví dụ
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 062
Tùy chọn bộ đóng gói¶
Để biết thêm thông tin chi tiết về trình đóng gói và các tùy chọn mà trình đóng gói có thể thực hiện, hãy xem các trang hướng dẫn và trang 183 trong cuốn sách của John Ousterhout
mỏ neoloại neo. Biểu thị nơi người đóng gói sẽ đặt mỗi nô lệ vào bưu kiện của mình
mở rộngBoolean,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0632 hoặc
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0633lấp đầy
Giá trị pháp lý. ________ 6634, ________ 6635, ________ 6636, ________ 6637
ipadx và ipadyKhoảng cách - chỉ định phần đệm bên trong ở mỗi bên của tiện ích nô lệ
padx và padyKhoảng cách - chỉ định phần đệm bên ngoài ở mỗi bên của tiện ích nô lệ
cạnhGiá trị pháp lý là. ________ 6638, ________ 6639, ________ 6640, ________ 6641
Các biến Widget khớp nối¶
Cài đặt giá trị hiện tại của một số tiện ích [như tiện ích nhập văn bản] có thể được kết nối trực tiếp với các biến ứng dụng bằng cách sử dụng các tùy chọn đặc biệt. Các tùy chọn này là
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0642,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0643,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0644,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0645 và
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0646. Kết nối này hoạt động theo cả hai cách. nếu biến thay đổi vì bất kỳ lý do gì, thì tiện ích được kết nối với nó sẽ được cập nhật để phản ánh giá trị mới
Thật không may, trong triển khai hiện tại của
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00, không thể bàn giao một biến Python tùy ý cho một tiện ích thông qua tùy chọn
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0642 hoặc
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0643. Các loại biến duy nhất mà điều này hoạt động là các biến được phân lớp từ một lớp có tên là Biến, được định nghĩa trong
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00
Có nhiều lớp con hữu ích của Biến đã được định nghĩa.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0651,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0652,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0653 và
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0654. Để đọc giá trị hiện tại của một biến như vậy, hãy gọi phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0655 trên đó và để thay đổi giá trị của nó, bạn gọi phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0656. Nếu bạn tuân theo giao thức này, tiện ích sẽ luôn theo dõi giá trị của biến mà bạn không cần can thiệp thêm
Ví dụ
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 063
Trình quản lý cửa sổ¶
Trong Tk có một lệnh tiện ích là
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0657 để tương tác với trình quản lý cửa sổ. Các tùy chọn cho lệnh
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0657 cho phép bạn kiểm soát những thứ như tiêu đề, vị trí, bitmap biểu tượng và những thứ tương tự. Trong
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00, các lệnh này đã được triển khai dưới dạng các phương thức trên lớp
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0660. Các widget cấp cao nhất được phân lớp từ lớp
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0660 và do đó có thể gọi trực tiếp các phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0660
Để truy cập vào cửa sổ cấp cao nhất có chứa một tiện ích nhất định, bạn thường chỉ cần tham khảo trang chủ của tiện ích. Tất nhiên, nếu tiện ích đã được đóng gói bên trong khung, thì chính sẽ không đại diện cho cửa sổ cấp cao nhất. Để truy cập cửa sổ cấp cao nhất có chứa tiện ích con tùy ý, bạn có thể gọi phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0663. Phương thức này bắt đầu bằng dấu gạch dưới để biểu thị thực tế rằng chức năng này là một phần của quá trình triển khai và không phải là giao diện cho chức năng Tk
Dưới đây là một số ví dụ về cách sử dụng điển hình
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 064
Các loại dữ liệu tùy chọn Tk¶
mỏ neoGiá trị pháp lý là điểm của la bàn.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0664,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0665,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0666,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0667,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0668,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0669,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0670,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0671, và cả
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0672bitmap
Có tám bitmap được đặt tên tích hợp sẵn.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0673,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0674,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0675,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0676, ________ 6677, ________ 6678, ________ 6679, ________ 6680. Để chỉ định tên tệp bản đồ bit X, hãy cung cấp đường dẫn đầy đủ tới tệp, trước
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0681, như trong
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0682boolean
Bạn có thể truyền số nguyên 0 hoặc 1 hoặc chuỗi
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0683 hoặc
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0684gọi lại
Đây là bất kỳ hàm Python nào không có đối số. Ví dụ
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 065màu sắc
Màu sắc có thể được đặt dưới dạng tên của X màu trong rgb. txt hoặc dưới dạng chuỗi biểu thị giá trị RGB trong 4 bit.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0685, 8 bit.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0686, 12 bit.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0687 hoặc 16 bit. Phạm vi
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0688, trong đó R, G, B ở đây đại diện cho bất kỳ chữ số hex hợp pháp nào. Xem trang 160 cuốn sách của Ousterhout để biết chi tiếtcon trỏ
Có thể sử dụng tên con trỏ X tiêu chuẩn từ
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0689 mà không cần tiền tố
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0690. Ví dụ: để lấy con trỏ tay [
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0691], hãy sử dụng chuỗi
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0692. Bạn cũng có thể chỉ định tệp bitmap và mặt nạ của riêng mình. Xem trang 179 cuốn sách của Ousterhoutkhoảng cách
Khoảng cách màn hình có thể được chỉ định bằng pixel hoặc khoảng cách tuyệt đối. Các pixel được cho dưới dạng số và khoảng cách tuyệt đối dưới dạng chuỗi, với ký tự ở cuối biểu thị đơn vị.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0693 cho centimet, ________ 6694 cho inch, ________ 6695 cho milimét, ________ 6696 cho điểm máy in. Ví dụ: 3. 5 inch được biểu thị bằng
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0697nét chữ
Tk sử dụng định dạng tên phông chữ danh sách, chẳng hạn như
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0698. Kích thước phông chữ với số dương được đo bằng điểm; hình học
Đây là một chuỗi có dạng
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0699, trong đó chiều rộng và chiều cao được đo bằng pixel đối với hầu hết các tiện ích [bằng ký tự đối với các tiện ích hiển thị văn bản]. Ví dụ.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 000biện minh
Giá trị pháp lý là các chuỗi.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 001,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0672,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 003 và
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 004vùng đất
Đây là một chuỗi có bốn phần tử được phân cách bằng dấu cách, mỗi phần tử là một khoảng cách hợp lệ [xem bên trên]. Ví dụ.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 005 và
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 006 và
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 007 đều là các khu vực hợp phápsự cứu tế
Xác định kiểu đường viền của widget sẽ là gì. Giá trị pháp lý là.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 008,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 009,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 010,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 011 và
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 012lệnh cuộn
Đây hầu như luôn là phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0656 của một số tiện ích thanh cuộn, nhưng có thể là bất kỳ phương thức tiện ích nào nhận một đối số duy nhấtbọc
Phải là một trong.
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 014,
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 015 hoặc
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 016
Ràng buộc và sự kiện¶
Phương thức liên kết từ lệnh widget cho phép bạn theo dõi các sự kiện nhất định và kích hoạt chức năng gọi lại khi loại sự kiện đó xảy ra. Hình thức của phương thức liên kết là
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 066
ở đâu
sự phối hợplà một chuỗi biểu thị loại sự kiện mục tiêu. [Xem trang man bind[3tk] và trang 201 trong cuốn sách của John Ousterhout, Tcl and the Tk Toolkit [ấn bản thứ 2], để biết chi tiết]
chức nănglà một hàm Python, nhận một đối số, được gọi khi sự kiện xảy ra. Một phiên bản Sự kiện sẽ được chuyển thành đối số. [Các chức năng được triển khai theo cách này thường được gọi là gọi lại. ]
cộnglà tùy chọn, hoặc là
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 017 hoặc là
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 018. Chuyển một chuỗi trống biểu thị rằng ràng buộc này sẽ thay thế bất kỳ ràng buộc nào khác mà sự kiện này được liên kết với. Vượt qua một
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 018 có nghĩa là chức năng này sẽ được thêm vào danh sách các chức năng được liên kết với loại sự kiện này
Ví dụ
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 067
Lưu ý cách trường widget của sự kiện đang được truy cập trong cuộc gọi lại
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 020. Trường này chứa tiện ích bắt sự kiện X. Bảng sau đây liệt kê các trường sự kiện khác mà bạn có thể truy cập và cách chúng được biểu thị bằng Tk, có thể hữu ích khi tham khảo các trang hướng dẫn về Tk
TK
Trường sự kiện Tkinter
TK
Trường sự kiện Tkinter
%f
tiêu điểm
%MỘT
than
%h
Chiều cao
%E
gửi_sự kiện
%k
mã khóa
%K
biểu tượng phím
%S
tiểu bang
%N
keysym_num
%t
thời gian
%T
loại hình
%w
bề rộng
%W
phụ tùng
%x
x
%X
x_root
%y
y
%Y
y_root
Chỉ số Tham số¶
Một số tiện ích yêu cầu thông số "chỉ mục" được chuyển. Chúng được sử dụng để trỏ đến một vị trí cụ thể trong tiện ích Văn bản hoặc tới các ký tự cụ thể trong tiện ích Mục nhập hoặc tới các mục menu cụ thể trong tiện ích Menu
Chỉ mục tiện ích mục nhập [chỉ mục, xem chỉ mục, v.v. ]Tiện ích mục nhập có các tùy chọn đề cập đến vị trí ký tự trong văn bản đang được hiển thị. Bạn có thể sử dụng các hàm
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 00 này để truy cập các điểm đặc biệt này trong tiện ích văn bảnChỉ mục tiện ích văn bản
Ký hiệu chỉ mục cho các tiện ích Văn bản rất phong phú và được mô tả tốt nhất trong các trang Tk man
Chỉ mục menu [menu. gọi [], trình đơn. entryconfig[], v.v. ]Một số tùy chọn và phương pháp cho các menu thao tác các mục menu cụ thể. Bất cứ khi nào một chỉ mục menu là cần thiết cho một tùy chọn hoặc một tham số, bạn có thể chuyển vào
một số nguyên đề cập đến vị trí số của mục nhập trong tiện ích con, được tính từ đầu, bắt đầu bằng 0;
chuỗi
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
22, đề cập đến vị trí menu hiện đang ở dưới con trỏ;chuỗi
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
23 đề cập đến mục menu cuối cùng;Một số nguyên đứng trước
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
681, như trongttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
25, trong đó số nguyên được hiểu là tọa độ pixel y trong hệ tọa độ của menu;chuỗi
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
14, cho biết hoàn toàn không có mục menu nào, thường được sử dụng nhất với menu. activate[] để hủy kích hoạt tất cả các mục và cuối cùng,một chuỗi văn bản được khớp mẫu với nhãn của mục menu, như được quét từ trên cùng xuống dưới cùng của menu. Lưu ý rằng loại chỉ mục này được xem xét sau tất cả các loại chỉ mục khác, điều đó có nghĩa là các kết quả phù hợp với các mục menu có nhãn
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
27,ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
28 hoặcttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
29 có thể được hiểu là các chữ ở trên, thay vào đó
Hình ảnh¶
Hình ảnh có định dạng khác nhau có thể được tạo thông qua lớp con tương ứng của
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 030
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
31 cho hình ảnh ở định dạng XBMttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
32 cho hình ảnh ở định dạng PGM, PPM, GIF và PNG. Cái sau được hỗ trợ bắt đầu từ Tk 8. 6
Một trong hai loại hình ảnh được tạo thông qua tùy chọn
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 033 hoặc
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 034 [cũng có sẵn các tùy chọn khác]
Sau đó, đối tượng hình ảnh có thể được sử dụng bất cứ nơi nào tùy chọn
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 035 được hỗ trợ bởi một số tiện ích [e. g. nhãn, nút, menu]. Trong những trường hợp này, Tk sẽ không giữ tham chiếu đến hình ảnh. Khi tham chiếu Python cuối cùng đến đối tượng hình ảnh bị xóa, dữ liệu hình ảnh cũng bị xóa và Tk sẽ hiển thị một hộp trống ở bất cứ nơi nào hình ảnh được sử dụng
Xem thêm
Gói Gối thêm hỗ trợ cho các định dạng như BMP, JPEG, TIFF và WebP, trong số các định dạng khác
Trình xử lý tệp¶
Tk cho phép bạn đăng ký và hủy đăng ký chức năng gọi lại sẽ được gọi từ vòng lặp chính Tk khi có thể thực hiện I/O trên bộ mô tả tệp. Chỉ một trình xử lý có thể được đăng ký cho mỗi bộ mô tả tệp. mã ví dụ
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 068
Tính năng này không khả dụng trên Windows
Vì bạn không biết có bao nhiêu byte để đọc, nên bạn có thể không muốn sử dụng các phương pháp
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 036 hoặc
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 037
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 038 hoặc
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 039, vì những phương pháp này sẽ yêu cầu đọc một số byte được xác định trước. Đối với ổ cắm, các phương pháp
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 040 hoặc
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 041 sẽ hoạt động tốt; Tiện ích. tk. createfilehandler[tệp , mặt nạ, func]¶
Đăng ký chức năng gọi lại trình xử lý tập tin func. Đối số tệp có thể là một đối tượng có phương thức
ttk::frame .frm -padding 10 grid .frm grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0 grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 043 [chẳng hạn như đối tượng tệp hoặc ổ cắm] hoặc một bộ mô tả tệp số nguyên. Đối số mặt nạ là sự kết hợp ORed của bất kỳ trong ba hằng số bên dưới. Cuộc gọi lại được gọi như sau