2012-06-28 12 views
5

Próbowałem dodać okno dialogowe pytania pytania do przycisku usuwania w aplikacji Tkinter. Obecnie mam przycisk, który usuwa zawartość folderu po naciśnięciu Chciałbym dodać pytanie potwierdzające tak/nie.Okno dialogowe pytania o pytanie Tkintera

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() 

Za każdym razem, gdy to uruchomię, otrzymuję komunikat "Usunięte", nawet jeśli naciśnie "Nie". Czy instrukcja if może zostać dodana do elementu tkMessageBox?

Odpowiedz

15

Problem dotyczy Twojej firmy if. Musisz uzyskać wynik z okna dialogowego (które będzie 'yes' lub 'no') i porównać z tym. Zwróć uwagę na drugą i trzecią linię w poniższym kodzie.

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

Teraz, dlaczego Twój kod wydaje się działać: W Pythonie duża liczba typów mogą być stosowane w sytuacjach, gdzie są oczekiwane wartości logiczne. Tak na przykład można zrobić:

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

To samo dzieje się na smyczki, gdzie każdy niepusty ciąg zachowuje się jak True i pusty ciąg zachowuje się jak False. Stąd if 'yes': zawsze wykonuje.

+0

Jest tak jasne, gdy widzisz odpowiedź. Próbowałem różnych kombinacji "if == coś", ale nie myślałem, aby użyć tkMessageBox jako dane wejściowe, odłożyłem słuchawkę, próbując użyć "tak" i "nie" pytania pytającego o dane wejściowe. Dziękuję za Twoją pomoc. – Jeff

+0

@Jeff: Nie ma problemu :) – JPvdMerwe

+0

Uruchamiając twoją funkcję 'deleteme()' tworzy również puste pole tickerera. Masz pojęcie, co może być przyczyną tego? –