Функция не запускается и не уверен, как конвертировать строку - PullRequest
1 голос
/ 31 января 2020

Итак, я пытаюсь создать программу, которая принимает пользовательский ввод, запускает функции для параметров, чтобы определить, какой процент выводится, а затем объединяет все заработанные проценты вместе перед тем, как их умножить на общую прибыль (в первом окне они вводят информацию в) дать номер. Пример: прибыль 15000, квалифицируется на 10% после выполнения параметров, вывод $ 1500. Короче говоря, это калькулятор комиссионных для моей организации, который я строю во время простоя, чтобы облегчить жизнь.

У меня большая часть построена, GUI запускается, но когда я ввожу цифры и нажмите рассчитать Я получаю эту ошибку и не знаю, как ее устранить.

** Отредактировано для добавления кода для GUI и кнопки

Исключение при обратном вызове Tkinter (последний вызов был последним): Файл "C: \ Users \ word2 \ AppData \ Local \ Programs \ Python \ Python38-32 \ lib \ tkinter__init __. py ", строка 1883, в вызов , возврат self.fun c (* args) Файл" C: /Users/word2/PycharmProjects/Commission2/main.py ", строка 75, в методе вычисления итоговой прибыли: брутто c () + ep c () + sprint_elite () * grossp.get () File" C: / Users / word2 / PycharmProjects / Commission2 / main.py ", строка 55, в гроссте, если брутто <5500: ошибка типа: <<не поддерживается между экземплярами 'function' и 'int' </p>

код:

    from tkinter import *
from tkinter import ttk


root = Tk()
root.title("Commission Calculator")


# Defining String variables to call user input

grossp = IntVar()
emergingp = IntVar()
pp = IntVar()
sc = IntVar()
pay = IntVar()

# Function to call user input and display it in the "Payout" Column


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
        value6 = 0
        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 value6
    except ValueError:
        return value6


def grossc():
    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 emerging <= 6:
        return 0.01

def sprint_elite():
    if se is True:
        return 0.03


def calculatetotal():
    return grossc() + epc() + sprint_elite() * grossp.get()


gross = calculategp
emerging = calculateep
se = calculatese()
# Defining Labels
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=N)


# Labels for input boxes


GP = Label(root, padx=5, pady=5, text="Gross Profit")
EP = Label(root, padx=5, pady=5, text="Emerging Products")
Plus_premium = Label(root, padx=5, pady=5, text="Plus/Premium")
Sprint_complete = Label(root, padx=5, pady=5, text="Sprint Complete")
Pay = Label(root, padx=5, pady=5, text="Total Payout")

# Defining input box

grossp_entry = Entry(root, textvariable=grossp, width=20)
emergingp_entry = Entry(root, textvariable=emergingp, width=20)
pp_entry = Entry(root, textvariable=pp, width=20)
sc_entry = Entry(root, textvariable=sc, width=20)
pay_entry = Entry(root, width=20, textvariable=pay)

# Placing input boxes on grid

grossp_entry.grid(row=0, column=1)
emergingp_entry.grid(row=1, column=1)
pp_entry.grid(row=2, column=1)
sc_entry.grid(row=3, column=1)
pay_entry.grid(row=4, column=1)

# Putting labels on grid

GP.grid(row=0, column=0)
EP.grid(row=1, column=0)
Plus_premium.grid(row=2, column=0)
Sprint_complete.grid(row=3, column=0)
Pay.grid(row=4, column=0,)

# Creating button

btn = Button(root, width=10, height=2, text="Calculate", command=calculatetotal)

# Placing button on Grid

btn.grid(row=5, column=0)

root.mainloop()

1 Ответ

1 голос
/ 01 февраля 2020
  1. Если вы используете print(grossc(), epc(), sprint_elite(), grossp.get()) в своей функции calculatetotal, вы увидите, в чем проблема. Результаты 0.0 0.01 None 0. Это одна из причин, по которой вам нужно следить за тем, как вы пишете свои операторы if при возврате данных. if se is True здесь не происходит, поэтому ничего не возвращается и, таким образом, значение None для sprint_elite(). Тем не менее, вы используете return в функции, прикрепленной к кнопке. Это в основном приведет к тому, что ничего не произойдет, так как ваша кнопка не может ничего сделать с возвратом.

  2. У вас есть операторы if, которые возвращают значение, но если условие не выполняется, они не возвращают ценность. Иногда это нормально, но в этом случае с вашей математикой должно быть возвращено число, иначе математика выдаст ошибку из-за Нет.

  3. Используйте import tkinter as tk вместо *, это будет помогите предотвратить перезапись других импортируемых вами файлов или функций / переменных, которые вы пишете.

  4. У вас 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...