вот волосатый, построенный таким образом, чтобы получить много одинаковых ответов. Обратите внимание, что хотя python считает ""
ложным, а все остальные строки - истиной, TCL имеет совершенно другое представление о вещах.
>>> import Tkinter
>>> tk = Tkinter.Tk()
>>> var = Tkinter.BooleanVar(tk)
>>> var.set("false")
>>> var.get()
False
>>> var.set("1")
>>> var.get()
True
>>> var.set("[exec 'rm -r /']")
>>> var.get()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 324, in get
return self._tk.getboolean(self._tk.globalgetvar(self._name))
_tkinter.TclError: 0expected boolean value but got "[exec 'rm -r /']"
>>>
Хорошая вещь об этом - то, что это довольно простое значение, которое вы можете использовать. Он ленив в преобразовании строк в значения, и он гигиеничен в отношении того, что он принимает и отвергает (обратите внимание, что, если вышеприведенное выражение было дано в приглашении tcl, оно стерло бы жесткий диск пользователя).
Плохо то, что требуется наличие Tkinter, что обычно, но не всегда верно, и, что более важно, требует создания экземпляра Tk, который является сравнительно тяжелым.
То, что считается истинным или ложным, зависит от поведения Tcl_GetBoolean
, которое учитывает 0
, false
, no
и off
, чтобы быть ложным и 1
, true
, yes
и on
чтобы быть правдой, без учета регистра. Любая другая строка, включая пустую строку, вызывает исключение.