2012-06-28 36 views
5

Tôi đã cố thêm một hộp thoại yêu cầu vào nút xóa trong Tkinter. Tôi có một nút xóa nội dung của một thư mục khi nó được nhấn Tôi muốn thêm một câu hỏi xác nhận có/không.Hộp thoại yêu cầu Tkinter

import Tkinter 
import tkMessageBox 

top = Tkinter.Tk() 
def deleteme(): 
    tkMessageBox.askquestion("Delete", "Are You Sure?", icon='warning') 
    if 'yes': 
     print "Deleted" 
    else: 
     print "I'm Not Deleted Yet" 
B1 = Tkinter.Button(top, text = "Delete", command = deleteme) 
B1.pack() 
top.mainloop() 

Mỗi lần tôi chạy, tôi nhận được câu lệnh "Đã xóa" ngay cả khi tôi nhấn "Không". Câu lệnh if có thể được thêm vào tkMessageBox không?

Trả lời

15

Sự cố là số if của bạn. Bạn cần nhận kết quả từ hộp thoại (sẽ là 'yes' hoặc 'no') và so sánh với điều đó. Lưu ý dòng thứ 2 và thứ 3 trong mã bên dưới.

def deleteme(): 
    result = tkMessageBox.askquestion("Delete", "Are You Sure?", icon='warning') 
    if result == 'yes': 
     print "Deleted" 
    else: 
     print "I'm Not Deleted Yet" 

Bây giờ, tại sao mã của bạn có vẻ hoạt động: Trong Python, có thể sử dụng một số lượng lớn trong các ngữ cảnh có giá trị boolean. Vì vậy, ví dụ bạn có thể làm:

arr = [10, 10] 
if arr: 
    print "arr is non-empty" 
else: 
    print "arr is empty" 

Điều tương tự cũng xảy ra đối với các chuỗi, nơi bất kỳ chuỗi không trống hoạt động như True và một chuỗi rỗng hoạt động như False. Do đó, if 'yes': luôn thực thi.

+0

Thật rõ ràng khi bạn thấy câu trả lời. Tôi đã thử sự kết hợp khác nhau của 'if == something' nhưng không nghĩ đến việc sử dụng tkMessageBox làm đầu vào, tôi bị treo lên khi cố gắng sử dụng 'yes' và 'no' của yêu cầu cho các đầu vào. Cảm ơn vì sự hỗ trợ của bạn. – Jeff

+0

@ Jeff: Không thành vấn đề :) – JPvdMerwe

+0

Chạy hàm của bạn 'deleteme()' cũng tạo một hộp tkinter trống. Bất kỳ ý tưởng những gì có thể gây ra điều này? –

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