2012-04-22 62 views
10

Làm cách nào để hiển thị và ẩn các tiện ích trong Tkinter? Tôi muốn có một hộp nhập cảnh, nhưng không có nó được hiển thị ở tất cả các lần. Ai đó có thể chỉ cho tôi các chức năng hiển thị và ẩn các tiện ích con và các vật dụng khác trong tkinter không? Tôi muốn có thể làm điều này mà không cần phải có nhiều khung hình.Hiển thị và Ẩn các tiện ích

+3

Tôi nghĩ, có câu trả lời cho câu hỏi của bạn - http://stackoverflow.com/questions/3819354/in-tkinter-is-there-any-way-to-make-a-widget-not-visable –

Trả lời

20

This has been answered before on stackoverflow. Câu trả lời ngắn gọn là, bạn có thể sử dụng grid_remove, điều này sẽ khiến tiện ích bị xóa nếu được thêm vào trước đó qua lưới. grid_remove nhớ vị trí của tiện ích, vì vậy, grid() đơn giản sẽ đưa nó trở lại mà không cần phải chỉ định lại tất cả các tùy chọn.

Bạn cũng có thể sử dụng pack_forget (nếu sử dụng gói) và grid_forget (nếu sử dụng lưới). Những công việc này tương tự như grid_remove ngoại trừ chúng khiến tất cả các thiết lập bị lãng quên, có nghĩa là bạn phải đặt nó trở lại vị trí thích hợp trên màn hình một cách rõ ràng.

Một tùy chọn khác là tận dụng thứ tự xếp chồng của các tiện ích con. Bạn có thể sử dụng phương thức lower để ẩn tiện ích con đằng sau tiện ích con và lift để tăng tiện ích ở trên. Xem this answer để biết ví dụ.

0

Tôi đã thử các đề xuất mà người khác đã đăng và nhận thấy rằng tôi đã mắc lỗi đơn giản. Bạn không thể gọi số .grid() trên cùng một dòng mà bạn khai báo tiện ích con bạn sẽ ẩn.

Để làm rõ, tôi trước đây đã này:

self.helpExpansion = ttk.Label(self.helpMenu, text="Expansion Widget").grid(row=1, column=3, sticky=EW) 
self.helpExpansion.grid_remove() 

Nhưng tôi đã nhận lỗi AttributeError: 'NoneType' object has no attribute 'grid_remove'. Để khắc phục nó, tôi đã phải thực hiện cuộc gọi đến .grid() trên một dòng mới, như thế này:

self.helpExpansion = ttk.Label(self.helpMenu, text="Help Expansion") 
self.helpExpansion.grid(row=1, column=3, sticky=EW) 
self.helpExpansion.grid_remove() 

Sau đó, để chuyển đổi giữa hiển thị và ẩn nấp, tôi chỉ xen kẽ giữa gọi self.helpExpansion.grid() (đối số chức năng không cần thiết) và self.helpExpansion.grid_remove().

Đối với tôi, nó đã hoạt động với cả hai kiểu tk.Label hoặc ttk.Label. Tôi đang sử dụng Python 2.7.13. Hy vọng rằng sẽ giúp!

+0

lý do cho điều này là thay vì gán tham chiếu Label cho self.helpExpansion, bạn thực sự gán giá trị trả về của cuộc gọi đến grid(), trả về None. Thêm lời gọi tới grid() vào cuộc gọi đến một hàm tạo widget là một cách viết tắt thuận tiện, nhưng chỉ khi bạn không cần tham chiếu đến tiện ích đó sau (chẳng hạn như nhãn cố định hoặc khi bạn tương tác với tiện ích con thông qua một trong các biến tk đặc biệt hoặc thông qua gọi lại). – DrEsperanto

Các vấn đề liên quan