如何在python中用for循环绘制步进图

2024-04-23 09:03:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图根据输入在for循环中绘制步进图。输入界面如下所示:

如果我输入service life = 60discount rate =2maintenance cost=1maintenance routine = 9quality = "high",在单击计算按钮后,总数将是3.94,这对我来说是确定的。你知道吗

enter image description here

我的代码如下:

from tkinter import *
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.figure import Figure

root = Tk()

root.title("LCAT")

var1 = StringVar()
var2 = StringVar()
var3 = StringVar()
var4 = StringVar()
var5 = StringVar()
Total = StringVar()

center_figure = Frame(root, width=500, height=500, relief=SUNKEN, bd=3)
center_figure.grid(row=7, column =1)

lblservice = Label(root, text="Service Life", bd=5).grid(row=0, column=0)
service_life = Entry(root, bd=5, textvariable=var1).grid(row=0, column=1)

lblrate = Label(root, text="Discount Rate", bd=5).grid(row=1, column=0)
discount_rate = Entry(root, bd=5, textvariable=var2).grid(row=1, column=1)

lblmaintenance = Label(root, text="Maintenance Cost", bd=5).grid(row=2, column=0)
maintenance_cost = Entry(root, bd=5, textvariable=var3).grid(row=2, column=1)

lblmaintenance_routine = Label(root, text="Maintenance Routine", bd=5).grid(row=3, column=0)
maintenance_time = Entry(root, bd=5, textvariable=var4).grid(row=3, column=1)

lblquality = Label(root, text="Quality", bd=5).grid(row=4, column=0)
cob_quality_main = ttk.Combobox(root, state='readonly', textvariable=var5)
cob_quality_main['value']=('','High','Normal','Low')
cob_quality_main.current(0)
cob_quality_main.grid(row=4, column=1)

lbltotal= Label(root, text="Total", bd=5).grid(row=5, column=0)
total_cost = Entry(root, bd=5, textvariable=Total).grid(row=5, column=1)
#------------------------------ Functions ---------------------------
def Exit():
    root.destroy()

def Maintenance():
    if (var5.get() == "High"):
        x = float(1.34)
        y = var4.get()
        z = var1.get()
        a = (float(var2.get())) / 100
        b = float(var3.get())
        ax = range(int(y), int(z), int(y))
        total = 0
        for t in ax:
            total += (0.5 + 0.5 * x * b) / (1 + a) ** t
            print(t)
            print('%0.2f' % (total))
            Total.set(str('%0.2f' % (total)))
            fig = Figure(figsize=(5, 4), dpi=100)
            fig.add_subplot(111).plot([t], [total])
            canvas = FigureCanvasTkAgg(fig, center_figure)
            canvas.draw()
            canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1, ipadx=45, ipady=30)

    elif var5.get() == "Normal":
        x = float(1.00)
        y = var4.get()
        z = var1.get()
        a = (float(var2.get())) / 100
        b = float(var3.get())
        ax = range(int(y), int(z), int(y))
        total = 0
        for t in ax:
            total += (0.5 + (0.5 * x * b)) / ((1 + a) ** t)
            print(t)
            print('%0.2f' % (t, total))
            Total.set(str('%0.2f' % (total)))
            fig = Figure(figsize=(5, 4), dpi=100)
            fig.add_subplot(111).plot([t], [total])
            canvas = FigureCanvasTkAgg(fig, center_figure)
            canvas.draw()
            canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1, ipadx=45, ipady=30)

    elif var5.get() == "Low":
        x = float(0.75)
        y = var4.get()
        z = var1.get()
        a = (float(var2.get())) / 100
        b = float(var3.get())
        ax = range(int(y), int(z), int(y))
        total = 0
        for t in ax:
            total += (0.5 + (0.5 * x * b)) / ((1 + a) ** t)
            print(t)
            print('%0.2f' % (t, total))
            Total.set(str('%0.2f' % (total)))
            fig = Figure(figsize=(5, 4), dpi=100)
            fig.add_subplot(111).plot([t], [total])
            canvas = FigureCanvasTkAgg(fig, center_figure)
            canvas.draw()
            canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1, ipadx=45, ipady=30)

btn1 = Button(root, text="Exit", bd=5, command=Exit).grid(row=6, column=0)
btn2 = Button(root, text="Calculate", bd=5, command=Maintenance).grid(row=6, column=1)

root.mainloop()

图形的x轴应该是t y轴就是总数

当我打印t和total时,列表也是正确的。但是,图形没有出现在画布上,我需要你的帮助。你知道吗

图表应该是这样的: enter image description here


Tags: textgetfigcolumnrootfloatbdgrid