2013-03-09 25 views
6

Bây giờ, tôi biết rằng bạn có thể kiểm tra để xem nếu một cửa sổ tồn tại bởi:Làm thế nào để biết một widget có tồn tại trong Tkinter không?

x.winfo_exists() 

nào trả về một Boolean. Bây giờ tôi đã tìm kiếm nhưng không thể tìm thấy chính xác những gì tôi cần. Cụ thể hơn, tôi cần kiểm tra sự tồn tại của các nút, nhãn, hộp danh sách, thanh trượt, v.v.

+1

Câu hỏi của bạn không rõ ràng. Bạn nói rằng bạn biết bạn có thể gọi 'winfo_exists' để xác định xem một widget có tồn tại hay không, nhưng bạn không biết làm thế nào để biết liệu các widget _your_ có tồn tại không? –

+0

KHÔNG, để xem cửa sổ có tồn tại không. Tôi không biết nó cũng làm việc cho các vật dụng cho đến khi tôi nhận được câu trả lời này. Cảm ơn bằng cách này. – madprogramer

Trả lời

15

winfo_exists trả về 1 trừ khi bạn đã hủy tiện ích, trong trường hợp này trả về 0. Phương thức này có thể được gọi trên bất kỳ lớp tiện ích nào , không chỉ gốc Tk hoặc Toplevels. Ngoài ra, bạn có thể nhận tất cả con của tiện ích con với winfo_children:

>>> import Tkinter as tk 
>>> root = tk.Tk() 
>>> label = tk.Label(root, text="Hello, world") 
>>> label.winfo_exists() 
1 
>>> root.winfo_children() 
[<Tkinter.Label instance at 0x0000000002ADC1C8>] 
>>> label.destroy() 
>>> label.winfo_exists() 
0 
>>> root.winfo_children() 
[] 
+0

Trong trường hợp bạn không trả về đối tượng khung thành "root" (hoặc trực tiếp không được tạo từ nó), bạn sẽ không thể thực hiện 'label.destroy()', nhưng u vẫn có thể tìm kiếm và lặp qua 'root. winfo_children() 'danh sách. Ví dụ, 'root.winfo_children() [0] .destroy()' hoặc 'root.winfo_children() [1] .destroy()' trong trường hợp bạn có một Menu ở trên cùng. Dù sao nó dễ dàng hơn để tạo ra xử lý cho mỗi khung bạn sử dụng, cộng với chèn mỗi nút/nhãn/etc bên trong một khung chính. – erm3nda

1

Bạn cũng có thể in loại i.e .. type (label). Điều này có thể hữu ích để cung cấp không chỉ sự tồn tại, mà còn tìm thấy nếu có bất cứ điều gì sắp tới 'NoneType' mà không có lỗi. Kiểu() sẽ cho bạn biết nếu bạn có một cá thể hoặc loại khác có thể cung cấp các manh mối có giá trị về cách chương trình đang hoạt động hoặc trả lại các mục cho những gì bạn nghĩ rằng bạn đang yêu cầu! Object.winfo_exists() và object.winfo_children là cụ thể, và sẽ thông qua một lỗi nếu đối tượng không phải là một kiểu 'instance'.

+0

[cách viết câu trả lời hay] (http://stackoverflow.com/help/how-to-answer) – Manish