2021.1.21——星露谷作物计算器的可视化

2021.1.21——星露谷作物计算器的可视化

前言

书承上文,之前做的计算器,仅仅是在调用excel里的数据,生成图表并放回到excel表里,每次要查看图片还要打开excel文件查看,实属繁琐,这几天学习了tkinter的相关知识,弃用之前简单使用的esaygui,先做一个简单的可视化的计算器,美化后面再慢慢实现

目标

运行py文件,让用户选择季节,输入当前的天数,然后就可以直接查看相应的图,一目了然

excel表格

和上次比没有改动,调用excel部分的代码也无修改
在这里插入图片描述

代码

import xlwings as xw
import matplotlib.pyplot as plt
import pandas as pd
from tkinter import *
from tkinter import messagebox
from tkinter.ttk import * #界面美化
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk


app = xw.App(visible=False, add_book=False)
file_path = 'd:\\python_study\\xinglugu.xlsx'  # 定义文件路径
workbook = app.books.open(file_path)
wsh1 = workbook.sheets['spring']  # 定义需要用的工作表
wsh2 = workbook.sheets['summer']
wsh3 = workbook.sheets['autumn']


def add_labels(rects):  #定义柱形图上数值显示的函数
    for rect in rects: #用for语句遍历每个柱状图
        height = rect.get_height() #获取柱状图的高度
        if height >= 0: #判断柱状图高度是否大于0,以确定数据标签的位置
            plt.text(rect.get_x() + rect.get_width() / 2, height + 0.02 , '%.2f' % height, ha='center',
                     va='bottom', color='black')
        else:
            plt.text(rect.get_x() + rect.get_width() / 2, height - 1.3 , '%.2f' % height, ha='center',
                     va='bottom', color='black')
        rect.set_edgecolor('black') #设置柱状图柱形条边框颜色

def print_picture(): #定义画图的动作,用于“计算”按钮
    num = var.get() #获取选项按钮返回的var变量值,1代表“春季”,2代表“夏季”,3代表“秋季”
    day = int(day_entry.get()) #获取输入框输入的值,并转换为int类型
    if day > 28:
        messagebox.showinfo(title='提示', message='请输入1-28以内的整数')
    if day <= 28:
        if num == 1:
            i = 2  # 公式需要循环获得每个单元格的值,定义各个变量,注意此处用f-string方式格式化变量,否则会报错
            while wsh1.range(f"B{i}").value is not None:  # 此处意指判定B列值为空时停止循环,注意判定为空值用None
                Bi = wsh1.range(f"B{i}").value  # 定义变量
                Ci = wsh1.range(f"C{i}").value
                Fi = wsh1.range(f"F{i}").value
                Gi = wsh1.range(f"G{i}").value
                Hi = wsh1.range(f"H{i}").value

                if day + int(Gi) > 28:  # 用if语句判定如果目前天数加上作物生长需要天数大于28,则收益为0
                    wsh1.range(f"L{i}").value = "0"
                else:
                    if Hi == None:  # 用if语句判定是否为可持续收获作物
                        a = (Ci * Fi - Bi) / Gi
                    else:
                        a = (int(((28 - day) - Gi) 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值