Как использовать текст из записей tkinter в качестве параметров с плавающей запятой для моей функции, которая позже используется в графике? - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь создать программу tkinter, которая моделирует основную c химическую кинетику, соответствующий код похож на приведенный ниже:

import scipy                    
import matplotlib.pyplot as plt 
import numpy as np              
import tkinter as tk            
from tkinter import ttk
from tkinter import messagebox
from scipy.integrate import odeint
def reqn(Ca,t):
    n = EntryO.get()
    k = EntryK.get()
    a = Ca**n
    c = (-1)* k * a
    return c
def calcc():
    ci = float(EntryCi.get())
    k = float(EntryK.get())
    n = int(EntryO.get())
    t = int(Entryt.get())    
    t1=0.0 # temporary variables
    t2=0.0
    t3=0.0 
    y=0.0
    if n==1:
       y = ci*np.exp((-1.0)*k*t)
    else:
       t1 = (n-1)*k*t
       t2 = (1/ci)**(n-1)
       t3= t1 + t2
       y = t3**(1/(1-n))
    C.set("")
    EntryC.insert(1,y)
form = tk.Tk()
form.title("Build Try 1: Reaction Kinetics")
#Tk varialbles
C = tk.DoubleVar()
Ci = tk.DoubleVar()
#Labels
LabelO = tk.Label(form, text="Order of Reaction:")
LabelK = tk.Label(form, text="Rate Constant:")
LabelCi = tk.Label(form, text="Initial concentration:")
LabelC = tk.Label(form, text="Reqd concentration:")
Labelt = tk.Label(form, text="New time:")
#Entries
EntryO = tk.Entry(form)
EntryK = tk.Entry(form)
EntryCi = tk.Entry(form, textvariable = Ci)
Entryt = tk.Entry(form)
EntryC = tk.Entry(form, textvariable = C)
#Buttons
btnC = tk.Button(form, text = "Calculate", command = calcc)
btnP = tk.Button(form, text = "Plot", command = plot)
form.mainloop()

Есть некоторые команды размещения сетки и другой код на стороне пользователя. что я временно удалил. Однако проблема в том, что когда я пытаюсь построить график с помощью кнопки построения, Python возвращает ошибку вроде:

TypeError: ufunc 'power' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

Кроме того, когда я пытался использовать tk.DoubleVar в качестве параметров, matplotlib.plot не ' не принимать созданные списки. Как мне обойти это?

...