Расчеты по пользовательскому вводу в поле ввода Python tkinter

avatar
Kevin Smith
8 апреля 2018 в 01:13
2198
1
-1

У меня небольшой вопрос относительно расчетов, полученных пользователем через поле ввода. Я не понимаю, почему расчет не выполняется в функции «Концентрация защиты» с надписью «CCalc». Я предполагаю, что ошибка возникает из-за того, что код не может получить пользовательский ввод «tbschk» из предыдущей функции. Есть ли что-то еще, на что мне нужно обратить внимание, чтобы понять, как это сделать правильно?

import tkinter as tk
from tkinter import Label, Button, Entry

#multiply total brain by 1000ul
def tbscalc():
    Bchk=float(BNum.get())
    BCalc = (Bchk*1000)
    tbsCalc["text"]=str(BCalc)

#divide concentration by total TBSul
def concentration():
    Cchk=float(Conc.get())
    tbschk=float(tbsCalc.get())
    CCalc=(tbschk/Cchk)
    PCalc["text"]=str(CCalc)

window=tk.Tk()
window.geometry("500x500")

#Using total brain to calculate TBS
BLabel=Label(window, text="Enter number of brains")
tbsLabel=Label(window, text="Amount of TBS needed in ul")
tbsCalc=Label(window)
BNum=Entry(window)
BTBSbtn=Button(window, text="Calculate", command=tbscalc)

#Using concentration to calculate total primary
CLabel=Label(window, text="Enter primary concentration")
PLabel=Label(window, text="This is how much primary antibody you need")
PCalc=Label(window)
Conc=Entry(window)
TPbtn=Button(window, text="Calculate", command=concentration)

#Locations
BLabel.grid(row=0 ,column=0)
BNum.grid(row=0 ,column=1)
tbsLabel.grid(row=1 ,column=0)
tbsCalc.grid(row=1 ,column=1)
BTBSbtn.grid(row=2 ,column=0)
CLabel.grid(row=3, column=0)
Conc.grid(row=3, column=1)
PLabel.grid(row=4, column=0)
PCalc.grid(row=4, column=1)
TPbtn.grid(row=5, column=0)

window.mainloop()

Я получаю сообщение об ошибке:

Исключение в обратном вызове Tkinter Traceback (последний последний вызов): Файл "C:\Users\Kevin\Anaconda3\lib\tkinter__init__.py", строка 1699, в call вернуть self.func(*args) Файл "C:/Users/Kevin/Desktop/Python/IHCprotocol.py", строка 13, в концентрации tbschk=поплавок(tbsCalc.get()) AttributeError: объект «Ярлык» не имеет атрибута «получить»

Ошибка, на которую ссылается

class CallWrapper:
    """Internal class. Stores function to call when some user
    defined Tcl function is called e.g. after an event occurred."""
    def __init__(self, func, subst, widget):
        """Store FUNC, SUBST and WIDGET as members."""
        self.func = func
        self.subst = subst
        self.widget = widget
    def __call__(self, *args):
        """Apply first function SUBST to arguments, than FUNC."""
        try:
            if self.subst:
                args = self.subst(*args)
            return self.func(*args)
        except SystemExit:
            raise
        except:
            self.widget._report_exception()
Источник
Aran-Fey
8 апреля 2018 в 01:15
2

Что значит "расчет не выполняется"? Это современное выражение «выдает исключение»? Если это так, вы должны включить в свой вопрос сообщение об ошибке и полную трассировку.

Kevin Smith
8 апреля 2018 в 16:54
0

Кажется, пора вздремнуть...

Ответы (1)

avatar
AD WAN
8 апреля 2018 в 08:33
1

Вы не можете get значение, которое вы отображаете как label, это то, о чем говорит вам ошибка, чтобы решить, что я создал entry widget с именем e1 и не разместил в окне, чтобы я может получить значение в нем. Ваше окно выглядит так же, но теперь вы можете отобразить результат.

import tkinter as tk
from tkinter import Label, Button, Entry

#multiply total brain by 1000ul

def tbscalc():
    Bchk=float(BNum.get())
    BCalc = (Bchk*1000)
    tbsCalc["text"]=str(BCalc)
    e1.insert(0, BCalc) # this receiving the answer in the so that i can be return

#divide concentration by total TBSul
def concentration():
    Cchk=float(Conc.get())
   # tbschk=float(tbsCalc.get())
    tbschk = float(e1.get()) # this getting the value in the entry widget
    CCalc=(tbschk/Cchk)
    PCalc["text"]=str(CCalc)


window=tk.Tk()
window.geometry("500x500")

#Using total brain to calculate TBS
BLabel=Label(window, text="Enter number of brains")
tbsLabel=Label(window, text="Amount of TBS needed in ul")
tbsCalc=Label(window)
BNum=Entry(window)
BTBSbtn=Button(window, text="Calculate", command=tbscalc)

#Using concentration to calculate total primary
CLabel=Label(window, text="Enter primary concentration")
PLabel=Label(window, text="This is how much primary antibody you need")
PCalc=Label(window)
Conc=Entry(window)
TPbtn=Button(window, text="Calculate", command=concentration)

e1 = Entry(window) # this new entry i created but didn't position
#e1.grid(row=5, column=30)

#Locations
BLabel.grid(row=0 ,column=0)
BNum.grid(row=0 ,column=1)
tbsLabel.grid(row=1 ,column=0)
tbsCalc.grid(row=1 ,column=1)
BTBSbtn.grid(row=2 ,column=0)
CLabel.grid(row=3, column=0)
Conc.grid(row=3, column=1)
PLabel.grid(row=4, column=0)
PCalc.grid(row=4, column=1)
TPbtn.grid(row=5, column=0)

window.mainloop()