Если вы используете print(grossc(), epc(), sprint_elite(), grossp.get())
в своей функции calculatetotal
, вы увидите, в чем проблема. Результаты 0.0 0.01 None 0
. Это одна из причин, по которой вам нужно следить за тем, как вы пишете свои операторы if при возврате данных. if se is True
здесь не происходит, поэтому ничего не возвращается и, таким образом, значение None для sprint_elite()
. Тем не менее, вы используете return в функции, прикрепленной к кнопке. Это в основном приведет к тому, что ничего не произойдет, так как ваша кнопка не может ничего сделать с возвратом.
У вас есть операторы if, которые возвращают значение, но если условие не выполняется, они не возвращают ценность. Иногда это нормально, но в этом случае с вашей математикой должно быть возвращено число, иначе математика выдаст ошибку из-за Нет.
Используйте import tkinter as tk
вместо *
, это будет помогите предотвратить перезапись других импортируемых вами файлов или функций / переменных, которые вы пишете.
У вас 2 проблемы с этими 3 строками.
gross = calculategp
emerging = calculateep
se = calculatese()
Первый 2 строки отсутствуют ()
. Тем не менее, они должны быть в функциях в том виде, в каком они есть сейчас, они запускаются в момент запуска кода и будут иметь только одно значение. Поэтому, если вы поместите их в функции, к которым они принадлежат, они будут возвращать значения в тот момент, когда вы нажимаете кнопку.
Я сделал общую очистку вашего кода, поэтому дайте мне знать, если что-то вас смущает.
На основании всего, о чем мы говорили в комментариях, я немного очистил ваш код, и он должен работать так, как ты ожидал. Дайте мне знать, если у вас есть какие-либо вопросы.
import tkinter as tk
from tkinter import ttk
def calculategp():
try:
value1 = int(grossp.get())
return value1
except ValueError:
return "error"
def calculateep():
try:
value2 = int(emergingp.get())
return value2
except ValueError:
return "error"
def calculatese():
try:
value3 = sc.get()
value4 = pp.get()
value5 = True
if value3 >= 65:
return True
if value4 >= 70:
return True
if value3 and value4 is True:
return value5
if value3 and value4 is False:
return 0
except ValueError:
return 0
def grossc():
gross = calculategp()
if gross < 5500:
return 0.0
if gross > 5500 < 10000:
return 0.01
if gross > 10000 < 15000:
return 0.03
if gross > 15000:
return 0.05
def epc():
if calculateep() <= 6:
return 0.01
else:
return 0
def sprint_elite():
if calculatese() is True:
print('True')
return 0.03
else:
return 0
def calculatetotal():
print(grossc(), epc(), sprint_elite(), grossp.get())
pay.set(grossc() + epc() + sprint_elite() * grossp.get())
root = tk.Tk()
root.title("Commission Calculator")
emergingp = tk.IntVar()
grossp = tk.IntVar()
pay = tk.IntVar()
pp = tk.IntVar()
sc = tk.IntVar()
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky='n')
tk.Label(root, padx=5, pady=5, text="Gross Profit").grid(row=0, column=0)
tk.Label(root, padx=5, pady=5, text="Emerging Products").grid(row=1, column=0)
tk.Label(root, padx=5, pady=5, text="Plus/Premium").grid(row=2, column=0)
tk.Label(root, padx=5, pady=5, text="Sprint Complete").grid(row=3, column=0)
tk.Label(root, padx=5, pady=5, text="Total Payout").grid(row=4, column=0)
tk.Entry(root, textvariable=grossp, width=20).grid(row=0, column=1)
tk.Entry(root, textvariable=emergingp, width=20).grid(row=1, column=1)
tk.Entry(root, textvariable=pp, width=20).grid(row=2, column=1)
tk.Entry(root, textvariable=sc, width=20).grid(row=3, column=1)
tk.Entry(root, textvariable=pay, width=20).grid(row=4, column=1)
btn = tk.Button(root, width=10, height=2, text="Calculate", command=calculatetotal)
btn.grid(row=5, column=0)
root.mainloop()