-1
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()
  • словами опишите, что ваш код должен делать (не используйте сломанный код в качестве спецификации задачи). Опишите явно на конкретном примере что вы хотели получить и что вместо этого происходит (по шагам)¶ Вы используете eval(), значит ли это что произвольное Питон выражение допустимо? – jfs May 18 '18 at 09:41
  • При вводе числа с точкой , повторный ввод точки блокировался. Т.е. можно ввести только 1 точку , а не более. И по возможности поправить код. Спасибо заранее. – Игорь Божок May 18 '18 at 13:07

1 Answers1

0

Ограничение ввода

Как уже говорилось выше, мы можем проверить ввод пользователя после того, как получим его, но не лучше ли было бы просто не допустить ввод ошибочных символов?

Поля ввода с маской.

Это подразумевает использование графического интерфейса для взаимодействия с пользователем и инструментария, который в состоянии отфильтровать недопустимые символы. Как правило, этот инструментарий имеет встроенные валидаторы (функции проверки корректности ввода прим. перев. ) для чисел, строк символов и пр. и очень прост в использовании. В настоящий момент, для создания графического интерфейса, я чаще всего использую 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

69 420 1970
  • 1,951
  • Да здорово.... А как мне использовать в моем коде это ограничение? я тока начал изучать TKinter. Очень буду благодарен – Игорь Божок May 18 '18 at 07:40