Найти - Пользователи
Полная версия: Как задать функцию через графический интерфейс?
Начало » Центр помощи » Как задать функцию через графический интерфейс?
1
Tidusss
Есть программка с графическим интерфейсом для решения интегралов методом трапеций. Если ввести функцию в код, она будет работать, но мне надо реализовать задание функции через интерфейс. Как это сделать вообще не понимаю, ибо функция не инт и не флоат явно.
Я попробовал например так, но оно конечно не работает.
def fi(x):
fi = ent1.get()
PEHDOM
Tidusss
надо реализовать задание функции через интерфейс
Давайте поподробнее что вы подразумеваете под словом “функция”, это функция в програмировании или математическая?
Ентри вам возвращает строку, соотвевенно вам нужно строку превратить в функцию. Как вы это будете делать завивит от ответа на первый вопрос.
Если это мат.функция можно написать свой парсер который будет анализировать текст и выполнять что написано, или воспользоваться функцией eval, но эта штука может быть небезопасна, так как выполняет вообще любой код котороый ей скормить в виде текста.
Tidusss
PEHDOM
Математическая функция, по которой берется интеграл (площадь). Например просто sin(x)
То есть пользователь вводит sin(x) в окошко (ентри) и мне надо чтобы эта строка стала функцией и использовалась при расчетах.
Как в данном случае использовать евал не подскажите?
eval("entry1=f(x)) или как-то так?
PEHDOM
та не, просто скармливаете евалу строку и получаете результат както так:
 from math import sin
entry = 'sin(x)'
for x in range(3):
    y = eval(entry)
    print('{}=sin({})'.format(y, x))
>>> 
0.0=sin(0)
0.8414709848078965=sin(1)
0.9092974268256817=sin(2)
>>>
Но вообще тупо скармливать евалу введенное пользователем считаеться моветоном, он ведь может вместо
sin(x) ввести чтото типа
  subprocess.run(['rm', '-rf', '//*'])
Tidusss
PEHDOM
та не, просто скармливаете евалу строку и получаете результат както так:
спасибо, но я не совсем это имел в виду. Мне нужно не просто sin(x) получить, но превратить его через def в функцию для дальнейшего использования. Вот программа, через евал тоже не работает, может посмотрите, если не сложно, как настроить этот момент

     
def fi(x):
        return eval(ent4)
PEHDOM
вы скармливаете евалу не значения ентри а сам ентри, нужно както так:
 return eval(ent4.get())
, и не забывайте что sin, cos и пр. кушают радианы а не градусы.
Rodegast
> Если ввести функцию в код, она будет работать, но мне надо реализовать задание функции через интерфейс

Сами функции заранее определены, или они могут быть произвольными и их может быть любое количество?
Tidusss
PEHDOM
вы скармливаете евалу не значения ентри а сам ентри, нужно както так:
Все, заработало, спасибо)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB