В программе с графическим интерфейсом после запуска и запуска графического интерфейса вы можете запускать свой код только в обратных вызовах обработчиков событий. Это называется событийно-управляемым программированием , и для начала может потребоваться некоторое время.
Например, когда пользователь нажимает эту первую кнопку Submit
, он вызывает вашу функцию click
. Внутри этой функции вы можете делать там что угодно.
Вы заставили все три кнопки вызывать одну и ту же функцию click
. Это не имеет особого смысла.
На самом деле, зачем вам даже три отдельные кнопки? Подумайте о типичной форме в типичном графическом интерфейсе - есть множество полей ввода, а затем одна кнопка «Отправить», которую пользователь нажимает после заполнения всех полей. Итак, давайте просто отбросим первые две кнопки и в конце будем иметь только одну.
Теперь, внутри этой функции click
, вы можете "делать все что угодно". Но что здесь уместно?
Первое, что вам нужно сделать - это получить значения из трех Entry
полей. Но вы пытались сохранить все три из них в одной переменной, поэтому вы не можете получить доступ ко всем трем из них, только к последней. Итак, вместо того, чтобы делать это три раза:
textentry = Entry(window, width = 10, bg = "white")
... дайте им разные имена:
n_entry = Entry(window, width = 10, bg = "white")
# ...
m_entry = Entry(window, width = 10, bg = "white")
# ...
operation_entry = Entry(window, width = 10, bg = "white")
И теперь ваша функция click
может получить все три значения:
def click():
n = n_entry.get()
m = m_entry.get()
operation = operation_entry.get()
Конечно, это будут строки - в точности как то, что вы получаете от вызова input()
в приложении командной строки. Таким образом, вы должны сделать то же самое здесь - вызвать int
или float
для них, обработать ошибки и т. Д.
Но как только вы это сделаете, остальная часть click
может быть вашим существующим закомментированным кодом. (За исключением того, что вам нужно избавиться от этих break
утверждений - отсюда нет цикла, который можно было бы вырвать.)
if operation == 1:
print(n + m)
elif operation == 2:
print(n - m)
# etc.
Однако вы можете изменить эти print
вызовы, чтобы вместо этого отображать результат в графическом интерфейсе. Например, у вас может быть пустой Label
с именем results_label
, и его текст должен быть str(n+m)
и т. Д.