from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Calculator")
# логика
def _calc(bttn):
if bttn == "=":
result = eval(data_out.get())
data_out.insert(END, "=" + str(result))
# Очистка полz
elif bttn == "C":
data_out.delete(0, END)
else:
if "=" in data_out.get():
data_out.delete(0, END)
data_out.insert(END, bttn)
# Список кнопок
buttons = [
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
" ", "0", " ", "+",
" ", ".", "=", "C"
]
a = 1
b = 0
data_out = Entry(root, width=50)
data_out.grid(columnspan=4)
for i in buttons:
#rel = ""
cmd = lambda x=i: _calc(x)
ttk.Button(root, text=i, command=cmd).grid(row=a, column=b)
b += 1
if b > 3:
b = 0
a += 1
root.mainloop()
1 Answers
Ограничение ввода
Как уже говорилось выше, мы можем проверить ввод пользователя после того, как получим его, но не лучше ли было бы просто не допустить ввод ошибочных символов?
Поля ввода с маской.
Это подразумевает использование графического интерфейса для взаимодействия с пользователем и инструментария, который в состоянии отфильтровать недопустимые символы. Как правило, этот инструментарий имеет встроенные валидаторы (функции проверки корректности ввода прим. перев. ) для чисел, строк символов и пр. и очень прост в использовании. В настоящий момент, для создания графического интерфейса, я чаще всего использую PyQT, однако и TKinter, и WxPython, и даже Kaptain также предоставляют такую возможность. Боюсь оказаться неправым, но кажется PyGTK подобной "фишки" еще не имеет.
Если вы не найдете валидатор под свои нужды, то PyQT, к примеру, позволит создать свой собственный.
Я не буду здесь углубляться в рассмотрение каждого инструментария, а в качестве примера продемонстрирую -- как "прицепить" валидатор числа к полю ввода в PyQT. Имя поля ввода в программе -- 'self.rate', Мы "прицепим" к этому полю ввода 'QDoubleValidator' и дополнительно укажем диапазон чисел от 0.0 до 999.0, а также ограничим число знаков после запятой -- двумя:
self.rate.setValidator(QDoubleValidator(0.0, 999.0, 2, self.rate) )
Здорово? Конечно здорово! Мы не только указали тип числа, но еще и ограничили диапазон вводимых чисел!
Другой способ наложения ограничений -- это выбор из списка допустимых значений, но вы наверняка уже знаете об этом.
Источник: http://www.linuxcenter.ru/lib/articles/programming/python_foolproof.phtml
- 1,951
-
Да здорово.... А как мне использовать в моем коде это ограничение? я тока начал изучать TKinter. Очень буду благодарен – Игорь Божок May 18 '18 at 07:40
eval(), значит ли это что произвольное Питон выражение допустимо? – jfs May 18 '18 at 09:41