Hướng dẫn python 3.10 tkinter - python 3.10 tkinter
Mã nguồn: lib/tkinter/__ init__.py Lib/tkinter/__init__.py Show
Gói from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9 (Giao diện TK TK) là giao diện Python tiêu chuẩn cho bộ công cụ GUI TCL/TK. Cả TK và from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9 đều có sẵn 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 01 từ dòng lệnh sẽ mở cửa sổ thể hiện giao diện TK đơn giản, cho bạn biết rằng from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9 được cài đặt đúng trên hệ thống của bạn và cũng hiển thị phiên bản TCL/TK được cài đặt, vì vậy bạn có thể đọc tài liệu TCL/TK cụ thể đến phiên bản đó. Tkinter hỗ trợ một loạt các phiên bản TCL/TK, được xây dựng có hoặc không có hỗ trợ chủ đề. Bản phát hành nhị phân Python chính thức gói TCL/TK 8.6 Chủ đề. 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 03 để 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 thêm một số lượng lớn logic của riêng mình để 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 các bổ sung và thay đổi này, và tham khảo tài liệu chính thức của TCL/TK để biết các chi tiết không thay đổi. Ghi chú TCL/TK 8.5 (2007) đã giới thiệu một bộ các thành phần giao diện người dùng theo chủ đề hiện đại cùng với API mới để sử dụng chúng. Cả API cũ và mới vẫn có sẵn. 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
Tài nguyên TCL/TK:
Books:
Ngành kiến trúc¶TCL/TK không phải là một thư viện duy nhất mà là 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 Python sườn cũng gửi một mô-đun bổ sung cùng với nó. TCLTCL là một ngôn ngữ lập trình được giải thích năng động, giống như Python. Mặc dù nó có thể được sử dụng một mình như một ngôn ngữ lập trình đa năng, nhưng nó thường được nhúng vào các ứng dụng C như một công cụ kịch bản 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 trường hợp đó 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ó hàng đợi sự kiện và có các cơ sở để gửi các sự kiện cho nó và xử lý chúng. Không giống như Python, mô hình thực thi TCL, được thiết kế xung quanh đa nhiệm hợp tác và Tkinter cầu nối sự khác biệt này (xem mô hình luồng để biết chi tiết). TKTK là gói TCL được triển khai trong C thêm các lệnh tùy chỉnh để tạo và thao tác 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 04 nhúng thể hiện thông dịch TCL của riêng mình với TK được tải vào nó. Các vật dụng TK TK rất có thể tùy chỉnh, mặc dù với chi phí xuất hiện trên ngày. TK sử dụng hàng đợi sự kiện TCL, để tạo và xử lý các sự kiện GUI.TTK TK theo chủ đề (TTK) là một gia đình TK mới hơn, cung cấp diện mạo tốt 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 phiên bản TK 8.5. Các ràng buộc Python được cung cấp trong một mô -đun riê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 05. Trong nội bộ, TK và TTK sử dụng các cơ sở của hệ điều hành cơ bản, tức là, XLIB trên UNIX/X11, Ca cao 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, ví dụ: để tạo tiện ích, mô -đun from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9 trước tiên lắp ráp chuỗi lệnh TCL/TK. Nó chuyển chuỗi lệnh TCL đó đến 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 03 nội bộ, sau đó gọi trình thông dịch TCL để đánh giá nó. Trình thông dịch TCL sau đó sẽ gọi vào các gói TK và/hoặc TTK, từ đó sẽ thực hiện các cuộc gọi đến XLIB, Ca cao hoặc GDI. Mô -đun TkinterHỗ trợ cho Tkinter được trải đều trên một số mô -đun. Hầu hết các ứng dụng sẽ cần mô -đun chính from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9, 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 05, cung cấp bộ tiện ích theo chủ đề hiện đại và API: from tkinter import * from tkinter import ttkLớp ________ 30 ________ 31 (ScreenRame = none, basename = none, className = 'tk', usetk = true, sync = false(screenName=None, baseName=None, className='Tk', useTk=True, sync=False, use=None)¶ Xây dựng một tiện ích TK TK, 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 trường hợp có trình thông dịch TCL liên quan 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 04 thường được khởi tạo bằng tất cả các giá trị mặc định. Tuy nhiên, các đối số từ khóa sau đây hiện đang được công nhận:Tên hiển thị Khi được đưa ra (dưới dạng chuỗi), đặt biến môi trường btn = ttk.Button(frm, ...) print(btn.configure().keys())3. (Chỉ x11) btn = ttk.Button(frm, ...) print(btn.configure().keys())3 environment variable. (X11 only)Basename Tên của tệp hồ sơ. Theo mặc định, basename có nguồn gốc từ tên chương trình ( btn = ttk.Button(frm, ...) print(btn.configure().keys())4).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). UsetkNếu btn = ttk.Button(frm, ...) print(btn.configure().keys())5, khởi tạo hệ thống con TK. Hàm btn = ttk.Button(frm, ...) print(btn.configure().keys())6 đặt điều này thành btn = ttk.Button(frm, ...) print(btn.configure().keys())7.đồng bộ hóa Nếu btn = ttk.Button(frm, ...) print(btn.configure().keys())5, thực thi tất cả các lệnh máy chủ X một cách đồng bộ, để các lỗi được báo cáo ngay lập tức. Có thể được sử dụng để gỡ lỗi. (Chỉ x11)sử dụng Chỉ định ID của cửa sổ để nhúng ứng dụng, thay vì nó được tạo như một cửa sổ Toplevel độc lập. ID phải được chỉ định theo cách tương tự như giá trị cho tùy chọn -use cho các widget toplevel (nghĩa là nó có một hình thức như thế được trả về bởi btn = ttk.Button(frm, ...) print(btn.configure().keys())9). 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 Toplevel có tùy chọn -Container của nó được bậ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 04 Đọc và diễn giải các tệp hồ sơ, được đặt tên là print(set(btn.configure().keys()) - set(frm.configure().keys()))1 và print(set(btn.configure().keys()) - set(frm.configure().keys()))2, vào trình thông dịch TCL và gọi print(set(btn.configure().keys()) - set(frm.configure().keys()))3 về nội dung của print(set(btn.configure().keys()) - set(frm.configure().keys()))4 và print(set(btn.configure().keys()) - set(frm.configure().keys()))5. Đường dẫn cho các tệp hồ sơ là biến môi trường print(set(btn.configure().keys()) - set(frm.configure().keys()))6 hoặc, nếu đó không được xác định, thì print(set(btn.configure().keys()) - set(frm.configure().keys()))7. print(set(btn.configure().keys()) - set(frm.configure().keys()))6 environment variable or, if that isn’t defined, then print(set(btn.configure().keys()) - set(frm.configure().keys()))7. ________ 48¶ Đố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 04. Điều này cung cấp quyền truy cập vào phiên 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 04 có cùng giá trị cho thuộc tính print(dir(btn)) print(set(dir(btn)) - set(dir(frm)))1 của nó. ________ 52¶ Đối tượng Widget chứa tiện ích 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 04, chủ là print(dir(btn)) print(set(dir(btn)) - set(dir(frm)))4 vì nó là cửa sổ chính. Các thuật ngữ chủ và phụ huynh là tương tự nhau và đôi khi được sử dụng thay thế cho tên đối số; Tuy nhiên, gọi print(dir(btn)) print(set(dir(btn)) - set(dir(frm)))5 trả về một chuỗi của tên tiện ích trong khi print(dir(btn)) print(set(dir(btn)) - set(dir(frm)))6 trả về đối tượng. Cha mẹ/con phản ánh mối quan hệ giống như cây trong khi Master/Slave phản ánh cấu trúc container. ________ 57¶ Hậu duệ ngay lập tức của tiện ích này dưới dạng print(dir(btn)) print(set(dir(btn)) - set(dir(frm)))8 với tên tiện ích con là các phím và đối tượng cá thể con là các giá trị. ________ 30 ________ 60 (ScreenRame = none, basename = none(screenName=None, baseName=None, className='Tk', useTk=False)¶ Hàm destroy . grid .frm.btn -column 0 -row 01 là một hàm nhà máy 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 04, 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 lái trình thông dịch TCL trong môi trường mà người ta không muốn tạo các cửa sổ Toplevel bên ngoài hoặc nơi người ta không thể (như 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 destroy . grid .frm.btn -column 0 -row 01 có thể có một cửa sổ Toplevel (và hệ thống con TK được khởi tạo) bằng cách gọi phương thức destroy . grid .frm.btn -column 0 -row 04 của nó. Các mô -đun cung cấp hỗ trợ TK bao gồm: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9 Mô -đun Tkinter chính. destroy . grid .frm.btn -column 0 -row 06 Hộp thoại để cho người dùng chọn một màu. destroy . grid .frm.btn -column 0 -row 07 Lớp cơ sở cho các hộp thoại được xác định trong các mô -đun khác được liệt kê ở đây. destroy . grid .frm.btn -column 0 -row 08 Hộp thoại phổ biến để cho phép người dùng chỉ định một tệp để mở hoặc lưu. destroy . grid .frm.btn -column 0 -row 09 Các tiện ích để giúp làm việc với phông chữ. .frm.btn invoke .frm.lbl configure -text "Goodbye"0 Truy cập vào hộp thoại TK tiêu chuẩn. .frm.btn invoke .frm.lbl configure -text "Goodbye"1 Tiện ích văn bản với một thanh cuộn dọc được tích hợp. .frm.btn invoke .frm.lbl configure -text "Goodbye"2 Hộp thoại cơ bản và các 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 05 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 from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9. Các 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 03 Một mô-đun nhị phân chứa giao diện cấp thấp với TCL/TK. Nó được tự động nhập bởi mô -đun chính from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9 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 được chia sẻ (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. .frm.btn invoke .frm.lbl configure -text "Goodbye"7 Python sườn tích hợp phát triển và môi trường học tập (IDLE). Dựa trên from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9. .frm.btn invoke .frm.lbl configure -text "Goodbye"9 Các hằng số biểu tượng có thể được sử dụng thay cho các chuỗi khi chuyển các tham số khác nhau cho các cuộc gọi Tkinter. Tự động nhập bởi mô -đun chính from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9. fred = Button(self, fg="red", bg="blue")1 (Thử nghiệm) Hỗ trợ kéo và thả cho from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9. Điều này sẽ trở nên không dùng nữa khi nó được thay thế bằng TK DND. fred = Button(self, fg="red", bg="blue")3 . 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 05. fred = Button(self, fg="red", bg="blue")5 Đồ họa rùa trong cửa sổ TK. Người bảo thủ cuộc sống TkinterPhần này không được thiết kế để trở thành một hướng dẫn đầy đủ về TK hoặc Tkinter. Đối với điều đó, hãy tham khảo một trong những tài nguyên bên ngoài được ghi nhận trước đó. Thay vào đó, phần này cung cấp một định hướng rất nhanh cho ứng dụng Tkinter trông như thế nào, xác định các khái niệm TK nền tảng 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 trong hướng dẫn tham khảo TCL/TK chính thức. Chương trình Hello World¶Chúng tôi sẽ bắt đầu bằng cách đi qua một ứng dụng Hello Hello World trong Tkinter. Đây là một loại nhỏ nhất mà chúng tôi có thể viết, nhưng có đủ để minh họa một số khái niệm chính mà bạn sẽ cần biết. from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop() Sau khi nhập, dòng tiếp theo tạo ra 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 04, 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ổ Toplevel, đượ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 một nhãn và nút mà chúng tôi sẽ tạo tiếp theo. Khung phù hợp bên trong cửa sổ gốc. Dòng tiếp theo tạo một tiện ích nhãn giữ một chuỗi văn bản tĩnh. Phương pháp fred = Button(self, fg="red", bg="blue")7 được sử dụng để chỉ định bố cục tương đối (vị trí) của nhãn trong tiện ích khung chứa của nó, tương tự như cách các bảng trong HTML hoạt động. Một tiện ích nút sau đó đượ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 fred = Button(self, fg="red", bg="blue")8 của cửa sổ gốc. Cuối cùng, phương thức fred = Button(self, fg="red", bg="blue")9 đặt mọi thứ lê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 chấm dứt. Khái niệm TK quan trọngNgay 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: WidgetsMột giao diện người dùng Tkinter được tạo thành từ các tiện ích riêng lẻ. Mỗi tiện ích được biểu diễn dưới dạng đối tượng Python, được khởi tạo từ các lớp như fred["fg"] = "red" fred["bg"] = "blue"0, fred["fg"] = "red" fred["bg"] = "blue"1 và fred["fg"] = "red" fred["bg"] = "blue"2.Phân cấp Widget Các vật dụng được sắp xếp trong một hệ thống phân cấp. Nhãn và nút được chứa trong một khung, lần lượt được chứa trong cửa sổ gốc. Khi tạo mỗi tiện ích trẻ em, tiện ích cha mẹ của nó được chuyển làm đối số đầu tiên cho hàm tạo tiện ích. Tùy chọn cấu hìnhCác tiện ích có các tùy chọn cấu hình, sửa đổi sự xuất hiện và hành vi của chúng, chẳng hạn như văn bản để hiển thị trong nhãn hoặc nút. Các lớp tiện ích khác nhau sẽ có các bộ tùy chọn khác nhau. Quản lý hình họcCác widget aren 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ư fred["fg"] = "red" fred["bg"] = "blue"3 điều khiển trong đó trong giao diện người dùng chúng được đặt.Vò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í làm mới màn hình chỉ khi tích cực chạy 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ẽ 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, Tkinter nội bộ đang lắp ráp các chuỗi đại diện cho các lệnh TCL/TK và thực hiện các lệnh đó trong trình thông dịch TCL được đính kèm với phiên bản Ứ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 thức 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, có những lúc sẽ hữu ích khi hiểu các lệnh TCL/TK bên dưới 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 TCL TCL tương tự như nhiều ngôn ngữ shell, trong đó từ đầu tiên là lệnh được thực thi, với các đối số cho lệnh đó theo nó, được phân tách bằng không gian. Không cần phải hiểu quá nhiều chi tiết, hãy chú ý những điều sau:
Làm thế nào để tôi…? Lựa chọn nào…? ¶Nếu bạn không chắc chắn làm thế nào để làm điều gì đó trong Tkinter và bạn có thể ngay lập tức tìm thấy nó trong tài liệu hướng dẫn hoặc tham chiếu mà bạn sử dụng, có một vài 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 các tiện ích riêng lẻ có thể thay đổi 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 nó tương ứng với các 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, nó giúp 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 sử dụng. Hướng nội, trong một vỏ python tương tác hoặc với from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()02, 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 nào, hãy gọi phương thức from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()03 của nó, trả về một từ điển chứa nhiều thông tin khác nhau về mỗi đối tượng, bao gồm các giá trị mặc định và hiện tại của nó. Sử dụng from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()04 để chỉ nhận tên của mỗi tùy chọn. btn = ttk.Button(frm, ...) print(btn.configure().keys()) Vì hầu hết các tiện ích có nhiều tùy chọn cấu hình chung, nên có thể hữu ích để tìm ra loại nào cụ thể cho một lớp tiện ích cụ thể. So sánh danh sách các tùy chọn với một tiện ích đơn giản hơn, giống như một khung, là một cách để làm điều đó. print(set(btn.configure().keys()) - set(frm.configure().keys())) Tương tự, bạn có thể tìm thấy các phương thức có sẵn cho một đối tượng Widget bằng hàm from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()05 tiêu chuẩn. Nếu bạn thử nó, bạn sẽ thấy có hơn 200 phương thức tiện ích phổ biến, vì vậy một lần nữa, việc xác định các phương thức cụ thể cho một lớp tiện ích là hữu ích. print(dir(btn)) print(set(dir(btn)) - set(dir(frm))) Điều hướng hướng dẫn tham khảo TCL/TKNhư đã lưu ý, Hướng dẫn tham khảo Lệnh TK chính thức (trang Man) thường là mô tả chính xác nhất về những gì hoạt động cụ thể trên các widget làm. Ngay cả khi bạn biết tên của tùy chọn hoặc phương thức mà bạn cần, bạn vẫn có thể có một vài nơi để xem. Mặc dù tất cả các hoạt động trong Tkinter được triển khai dưới dạng các cuộc gọi phương thức trên các đối tượng Widget, nhưng bạn đã thấy rằng nhiều hoạt động TCL/TK xuất hiện dưới dạng các lệnh lấy tên đường dẫn tiện ích làm tham số đầu tiên của nó, theo sau là các tham số tùy chọn, ví dụ: destroy . grid .frm.btn -column 0 -row 0 Tuy nhiên, những người khác trông giống như các phương thức được gọi trên một đối tượng Widget (trên 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 đường dẫn tiện ích, với tham số đầu tiên cho lệnh đó là tên của một phương thức để gọi). .frm.btn invoke .frm.lbl configure -text "Goodbye" Trong tài liệu tham khảo chính thức của TCL/TK, bạn sẽ tìm thấy hầu hết các hoạt động trông giống như phương thức gọi trên trang người đàn ông cho một tiện ích cụ thể (ví dụ: bạn sẽ tìm thấy phương thức from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()06 trên trang TTK :: Nút Man), trong khi các chức năng Đó là một tiện ích làm tham số thường có trang người đàn ông riêng của họ (ví dụ: lưới). Bạn sẽ tìm thấy nhiều tùy chọn và phương thức phổ biến trong các tùy chọn hoặc TTK :: Widget Man Pages, trong khi các trang khác được tìm thấy trong trang người đàn ông cho một lớp tiện ích cụ thể. Bạn cũng sẽ thấy rằng nhiều phương pháp Tkinter có tên ghép, ví dụ: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()07, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()08, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()09. Bạn có thể tìm thấy tài liệu cho tất cả những điều này trong trang Winfo Man. Ghi chú Một cách khó hiểu, cũng có các phương pháp trên tất cả các tiện ích Tkinter mà don thực sự hoạt động trên tiện ích, nhưng hoạt động ở một 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 pháp để truy cập vào bảng tạm hoặc chuông hệ thống. . Mô hình luồngPython và TCL/TK có các mô hình luồng rất khác nhau, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9 cố gắng cầu nối. Nếu bạn sử dụng các chủ đề, bạn có thể cần phải nhận thức được điều này. Một thông dịch viên Python có thể có nhiều chủ đề được 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 phiên dịch TCL riêng biệt đượ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 phiên dịch, mặc dù mỗi phiên bản phiên dịch chỉ có thể được sử dụng bởi một luồng tạo 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 04 được tạo bởi from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9 chứa trình thông dịch TCL. Nó cũng theo dõi chủ đề nào đã tạo ra trình thông dịch đó. Các cuộc gọi đến from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9 có thể được thực hiện từ bất kỳ luồng 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 cuộc gọi đã 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 04, một sự kiện sẽ được đăng lên hàng đợi sự kiện phiên dịch và khi được thực hiện, kết quả sẽ được trả lại cho chuỗi cuộc gọi Python. Các ứng dụng TCL/TK thường dựa trên sự kiện, có nghĩa là sau khi khởi tạo, trình thông dịch chạy một vòng lặp sự kiện (tức là from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()16) và phản hồi các sự kiện. Bởi vì nó là một luồng đơn, người xử lý sự kiện phải phản hồi nhanh chóng, nếu không họ sẽ chặn các sự kiện khác được xử lý. Để tránh điều này, bất kỳ tính toán dài nào không nên chạy trong một 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 luồng khác. Điều này khác với nhiều bộ công cụ GUI nơi GUI chạy trong một luồng hoàn toàn riêng biệt với tất cả cá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à các sự kiện xử lý, bất kỳ cuộc gọi from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9 nào được thực hiện từ các luồng khác với cuộc gọi chạy trình thông dịch TCL sẽ thất bại. Một số trường hợp đặc biệt tồn tại:
Tài liệu tham khảo tiện dụngCài đặt Tùy chọn JoTùy chọn kiểm soát những thứ như màu sắc và chiều rộng đường viền của một tiện ích. Các tùy chọn có thể được đặt theo ba cách: Tại thời điểm tạo đối tượng, sử dụng các đối số từ khóafred = Button(self, fg="red", bg="blue")Sau khi tạo đối tượng, xử lý tên tùy chọn như chỉ mục từ điển fred["fg"] = "red" fred["bg"] = "blue"Sử dụng phương thức config () để cập nhật nhiều attrs sau để tạo đối tượng from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()0 Để có lời 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 TK Man để biết tiện ích trong câu hỏi. Lưu ý rằng các trang người đàn ông liệt kê các tùy chọn tiêu chuẩn của các tùy chọn và các tùy chọn cụ thể của Widget Widget cho mỗi tiện ích. Cái trước là danh sách các tùy chọn phổ biến cho nhiều tiện ích, sau này là các tùy chọn đặc biệt với tiện ích cụ thể đó. Các tùy chọn tiêu chuẩn được ghi lại trên trang người đàn ông tùy chọn (3). Không có sự khác biệt giữa các tùy chọn tiêu chuẩn và tiện ích cụ thể được thực hiện trong tài liệu này. Một số tùy chọn don lồng áp dụng cho một số loại vật dụng. Việc một tiện ích nhất định có phản hồi với một tùy chọn cụ thể hay không phụ thuộc vào lớp của tiện ích; Các nút có tùy chọn from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()23, nhãn thì không. 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 Widget Man Man hoặc có thể được truy vấn trong thời gian chạy bằng cách gọi phương thức from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()24 mà không có đối số hoặc bằng cách gọi phương thức from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()04 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ụ: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()26) và có giá trị là 5 bộ. Một số tùy chọn, như from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()27 là từ đồng nghĩa với các tùy chọn phổ biến với tên dài ( from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()27 là tốc ký cho nền tảng của Hồi giáo). Vượt qua phương thức from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()24 Tên của tùy chọn tốc ký sẽ trả về 2-tuple chứ không phải 5-tuple. 2-Tuple được truyền lại sẽ chứa tên của từ đồng nghĩa và tùy chọn thực tế của người dùng (chẳng hạn như from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()30).
Example: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()1 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ụ. Packer¶Packer là một trong những cơ chế quản lý hình học TK TK. Các nhà quản lý hình học được sử dụng để chỉ định vị trí tương đối của các vật dụng trong thùng chứa của họ - chủ nhân của chúng. Trái ngược với vị trí cồng kềnh hơn (được sử dụng ít phổ biến hơn và chúng tôi không bao gồm ở đây), người đóng gói có đặc điểm kỹ thuật về mối quan hệ định tính - ở trên, ở bên trái, làm đầy, v.v. - và thực hiện mọi thứ để xác định tọa độ vị trí chính xác cho bạn. 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 các tiện ích nô lệ trên bên trong. Packer được sử dụng để kiểm soát nơi các tiện ích nô lệ xuất hiện bên trong chủ mà chúng được đóng gói. Bạn có thể đóng gói các widget vào khung và khung vào các khung khác, để đạt được loại bố cục mà bạn mong muốn. Ngoài ra, sự sắp xếp được điều chỉnh động để phù hợp với các thay đổi gia tăng đối với cấu hình, một khi nó được đóng gói. Lưu ý rằng các widget không xuất hiện cho đến khi họ có hình học được chỉ định với trình quản lý hình học. Đó là một sai lầm sớm phổ biến để bỏ qua đặc điểm kỹ thuậ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 tiện ích sẽ chỉ xuất hiện sau khi nó có phương thức Packer from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()36 được áp dụng cho nó. Phương thức Gói () có thể được gọi với các cặp tùy chọn từ khóa/giá trị kiểm soát trong đó tiện ích sẽ xuất hiện trong thùng chứa của nó và cách hoạt động 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ụ: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()2 Tùy chọn PackerĐể biết thêm thông tin sâu rộng về Packer và các tùy chọn có thể thực hiện, hãy xem các trang Man và trang 183 của cuốn sách John Ousterhout. mỏ neoLoại neo. Biểu thị nơi người đóng gói đặt mỗi nô lệ trong bưu kiện của nó. mở rộngBoolean, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()37 hoặc from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()38.lấp đầy Giá trị pháp lý: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()39, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()40, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()41, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()42.iPadx và iPady Một khoảng cách - chỉ định đệm nội bộ ở mỗi bên của tiện ích nô lệ. Padx và PadyMột khoảng cách - chỉ định đệm bên ngoài ở mỗi bên của tiện ích nô lệ. cạnhCác giá trị pháp lý là: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()43, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()44, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()45, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()46. Các biến tiện ích ghép nốiCài đặt giá trị hiện tại của một số tiện ích (như các 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à from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()47, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()48, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()49, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()50 và from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()51. Kết nối này hoạt động cả hai cách: nếu biến thay đổi vì bất kỳ lý do gì, thì tiện ích mà nó kết nối với sẽ được cập nhật để phản ánh giá trị mới. Thật không may, trong quá trình triển khai hiện tại của from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9, không thể bàn giao biến Python tùy ý cho một tiện ích thông qua tùy chọn from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()47 hoặc from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()48. Các loại biến duy nhất mà các tác phẩm này là các biến được phân lớp từ một lớp gọi là biến, được định nghĩa trong from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9. Có nhiều lớp con hữu ích của biến đã được xác định: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()56, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()57, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()58 và from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()59. Để đọc giá trị hiện tại của một biến như vậy, hãy gọi phương thức from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()60 trên nó và để thay đổi giá trị của nó, bạn gọi phương thức from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()61. 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, không có sự can thiệp nào khác về phía bạn. Ví dụ: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()3 Người quản lý cửa sổTrong TK, có một lệnh tiện ích, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()62, để tương tác với trình quản lý cửa sổ. Các tùy chọn cho lệnh from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()62 cho phép bạn kiểm soát những thứ như tiêu đề, vị trí, bitmap biểu tượng và tương tự. Trong from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9, các lệnh này đã được thực hiện dưới dạng các phương thức trên lớp from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()65. Các tiện ích Toplevel được phân lớp từ lớp from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()65 và do đó có thể gọi trực tiếp các phương thức from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()65. Để có được ở cửa sổ Toplevel có chứa một tiện ích nhất định, bạn thường chỉ có thể tham khảo Widget Master Master. Tất nhiên, nếu tiện ích đã được đóng gói bên trong một khung, Master won đã đại diện cho một cửa sổ Toplevel. Để có được ở cửa sổ Toplevel có chứa tiện ích tùy ý, bạn có thể gọi phương thức from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()68. Phương pháp này bắt đầu bằng một 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 việc thực hiện 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: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()4 Các loại dữ liệu tùy chọn TKmỏ neoLoại neo. Biểu thị nơi người đóng gói đặt mỗi nô lệ trong bưu kiện của nó. mở rộngBoolean, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()37 hoặc from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()38.boolean lấp đầy Giá trị pháp lý:from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()39, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()40, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()41, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()42. iPadx và iPady from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()5Một khoảng cách - chỉ định đệm nội bộ ở mỗi bên của tiện ích nô lệ. Padx và Pady Một khoảng cách - chỉ định đệm bên ngoài ở mỗi bên của tiện ích nô lệ.cạnh Các giá trị pháp lý là:from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()43, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()44, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()45, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()46. Các biến tiện ích ghép nối Cài đặt giá trị hiện tại của một số tiện ích (như các 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àfrom tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()47, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()48, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()49, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()50 và from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()51. Kết nối này hoạt động cả hai cách: nếu biến thay đổi vì bất kỳ lý do gì, thì tiện ích mà nó kết nối với sẽ được cập nhật để phản ánh giá trị mới. Thật không may, trong quá trình triển khai hiện tại của from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9, không thể bàn giao biến Python tùy ý cho một tiện ích thông qua tùy chọn from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()47 hoặc from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()48. Các loại biến duy nhất mà các tác phẩm này là các biến được phân lớp từ một lớp gọi là biến, được định nghĩa trong from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9.hình học Đây là một chuỗi của mẫ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 004, trong đó chiều rộng và chiều cao được đo bằng pixel cho hầu hết các tiện ích (tính bằng các ký tự cho các widget 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 005.Biện minh Các 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 006, from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()77, 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 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 009.vùng đất Đây là một chuỗi có bốn yếu tố được phân phối không gian, mỗi yếu tố là một khoảng cách hợp pháp (xem ở 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 010 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 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 012 đều là các khu vực pháp lý.sự cứu tế Xác định phong cách biên giới của một tiện ích sẽ là gì. Các 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 013, 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, 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 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 017.cuộn Đây hầu như luôn luôn là phương thức from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()61 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 có một đối số duy nhất.bọc Phải là một trong nhữ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 019, 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 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 021. Ràng buộc và sự kiệnPhương thức liên kết từ lệnh Widget cho phép bạn xem một số sự kiện nhất định và có 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à: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()6 where: sự phối hợplà một chuỗi biểu thị loại mục tiêu của sự kiện. . funclà một hàm Python, lấy một đối số, được gọi khi sự kiện xảy ra. Một thể hiện sự kiện sẽ được thông qua như là đố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, 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 022 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 023. Vượt qua một chuỗi trống biểu thị rằng ràng buộc này là để thay thế bất kỳ ràng buộc nào khác mà sự kiện này được liên kết. Truyề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 023 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 bị ràng buộc với loại sự kiện này. Ví dụ: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()7 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 025. Trường này chứa các tiện ích bắt được sự kiện X. Bảng sau 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 ký hiệu trong TK, có thể hữu ích khi đề cập đến các trang TK Man.
Tham số chỉ mụcMột số tiện ích yêu cầu các tham số của Index Index phải được thông qua. Chúng được sử dụng để chỉ vào một vị trí cụ thể trong một tiện ích văn bản hoặc các ký tự cụ thể trong một tiện ích nhập hoặc các mục menu cụ thể trong một tiện ích menu. Chỉ mục tiện ích nhập cảnh (chỉ mục, chỉ mục xem, v.v.)Các tiện ích nhập có các tùy chọn đề cập đến các vị trí ký tự trong văn bản đang được hiển thị. Bạn có thể sử dụng các chức năng from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()9 này để truy cập các điểm đặc biệt này trong các tiện ích văn bản:Chỉ 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.invoke (), menu.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 tham số, bạn có thể chuyển vào:
Hình ảnhHình ảnh của cá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 035:
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 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 (các tùy chọn khác cũng có sẵn). Đối tượng hình ảnh sau đó 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 040 được hỗ trợ bởi một số tiện ích (ví dụ: nhãn, nút, menu). Trong những trường hợp này, TK sẽ không giữ một 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 sẽ 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 bổ sung hỗ trợ cho các định dạng như BMP, JPEG, TIFF và Webp, trong số các định dạng khác. Người xử lý tập tinTK 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ừ TK Mainloop khi I/O có thể trên bộ mô tả tệp. Chỉ có một người xử lý có thể được đăng ký cho mỗi mô tả tệp. Mã ví dụ: from tkinter import * from tkinter import ttk root = Tk() frm = ttk.Frame(root, padding=10) frm.grid() ttk.Label(frm, text="Hello World!").grid(column=0, row=0) ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0) root.mainloop()8 Tính năng này không có sẵn trên Windows. Vì bạn không biết có bao nhiêu byte có sẵn để đọc, bạn có thể không muốn sử dụng 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 041 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 042 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 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 044, vì chúng sẽ nhấn mạnh vào việc đọ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 045 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 046 sẽ hoạt động tốt; Đối với các tệp khác, sử dụng đọc thô 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 047. ________ 248 ________ 249 (Tệp, Mặt nạ, Func) ¶(file, mask, func)¶ Đăng ký chức năng gọi lại tệp 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 050 (chẳng hạn như tệp hoặc đối tượng ổ cắm) hoặc bộ mô tả tệp số nguyên. Đối số mặt nạ là sự kết hợp của bất kỳ trong số ba hằng số bên dưới. Cuộc gọi lại được gọi như sau: ________ 248 ________ 252 (Tệp) ¶(file)¶ Ung đăng ký một người xử lý tập tin. ________ 30 ________ 254¶ ________ 30 ________ 256¶ ________ 30 ________ 258¶Các hằng số được sử dụng trong các đối số mặt nạ. |