Python, TkInter. Не выводится ответ из функции в Label
import tkinter
from tkinter import ttk
new = 1
def factorialo():
global new
a = int(vvod.get())
if a < 0:
new = "Введите положительное число!"
elif a == 0:
exit()
else:
for i in range(1, a + 1):
new = new * i
return new
root = tkinter.Tk()
root.title('Нахожедние факториала')
root.geometry("800x500")
print(root.geometry())
tkinter.Label(root, text="Нахождение факториала.").pack(pady=5)
tkinter.Label(root, text="Выход через ввод 0.").pack(pady=5)
vvod = tkinter.Entry(root, width=50, justify=tkinter.CENTER)
vvod.pack()
ttk.Button(root, text="Посчитать", command=factorialo).pack(pady=5)
tkinter.Label(root, text = new).pack(pady=20)
root.mainloop()
Недавно решил проблему с new is not defined и теперь в label вывода выводит единичику из начала кода, return будто не работает.
Ответы (1 шт):
Автор решения: bilal
→ Ссылка
- Надо присвоить Label к переменной и менять её текст с помощью метода
.config(text="текст") - Тут глобальная переменная не нужна
- Ввод может быть нулевым, факториал 0 равно 1
Вот пример кода:
import tkinter as tk
def factorialo():
new = 1
a = int(vvod.get())
if a < 0:
new = "Введите положительное число!"
else:
for i in range(1, a + 1):
new = new * i
result_label.config(text=new)
root = tk.Tk()
root.title('Нахожедние факториала')
root.geometry("800x500")
print(root.geometry())
tk.Label(root, text="Нахождение факториала.").pack(pady=5)
tk.Label(root, text="Выход через ввод 0.").pack(pady=5)
vvod = tk.Entry(root, width=50, justify=tk.CENTER)
vvod.pack()
tk.Button(root, text="Посчитать", command=factorialo).pack(pady=5)
result_label = tk.Label(root, text="0")
result_label.pack(pady=20)
root.mainloop()