从tkinter gui接收数据并在列表之间执行数学运算

2024-06-08 21:37:06 发布

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

我一直在开发一个程序(Python语言),该程序可以接收tkinter GUI的数据,主要建议是进行数学运算

程序分为几个部分。首先,您将看到一个类似于表的结构,由5列组成。实际上每一列都是字典

在表格之后,您将看到一个按钮,当用户单击它时,激活GuardarDatos()函数,在这个函数中,每个字典发送信息以生成一个列表,最后尝试在列表之间进行一些数学计算(求和和和和乘法)

我的问题是什么

  1. 我尝试了许多表单来进行列表之间的数学运算,但是 结果类似于字符串分组。换言之,如果“suministros[1]=1”和“mano_obra[1]=1”,并且我尝试进行“求和”,结果是“11”,而不是数字“2”

  2. 我想把数学运算的结果放在相应的列(“unitario”和“valor total”),但我不能使用de“set方法”

我的代码:

from tkinter import*
from math import *
import operator

root = Tk()
root.title("Window")
root.geometry("800x600")

labelframe1 = LabelFrame(root, text="Table for operations")
labelframe1.pack()
############################################################################
# ----------------  VARIABLE DECLARATION  ------------------------------
############################################################################
cantidad = []
valor_unitario = []
total_parcial = []
suministros = []
mano_obra = []

###################################################################################
# =============================   FUNCTION  ====================================
###################################################################################


def GuardarDatos():
    for key in entries_suministros:
        suministros.append(entries_suministros[key].get())
        print("suministros: ", suministros)

    print("=====================")

    for key in entries_mo:
        mano_obra.append(entries_mo[key].get())
        print("mano de obra: ", mano_obra)
    print("=====================")

    print("==== unitarios ========")
    valor_unitario = list(map(operator.add, suministros,
                              mano_obra))

    print("valor unitario: ", valor_unitario)

    print("==== totales parciales ======")
    total_parcial = list(map(operator.mul, valor_unitario,
                             cantidad))

    print("totales parciales:", total_parcial)


########################################################################################
# ANOTHER OPTION TO MAKE MATH OPERATION --- IT DOES NOT WORKED
#######################################################################################
    # def add(suministros, mano_obra):
    # for x in range(0, len(suministros)):
    #    loco = (suministros[x]) + (mano_obra[x])
    #   valor_unitario.append(loco)  # Suma Strings
    # Letrero_unit.config(text=valor_unitario)
    #   print(valor_unitario[x])
    #    return valor_unitario  # Con el returno me pone 1 en posicion "[0]"
####################################################################################
# ======================== TABLE STRUCTURE ===================================
####################################################################################
# COLUMN 1: CANTIDAD =======================
entries_cant = {}
for row0 in range(0, 3):
    datosEntry0 = Label(labelframe1, text="cantidad")  # Label
    datosEntry0.grid(row=0, column=0, sticky="nsew")  # Label
    datosEntry0 = Entry(labelframe1)  # Entry
    datosEntry0.grid(row=row0, column=0)  # Entry
    entries_cant["Entrybox{0}".format(row0)] = datosEntry0  # Entry


# COLUMN 2: UNITARIOS =================
for row1 in range(3):
    datosEntry1 = Label(labelframe1, text="Unitario")
    datosEntry1.grid(row=0, column=1, sticky="nsew")
    datosEntry1 = Entry(labelframe1)
    datosEntry1.grid(row=row1, column=1)


# COLUMN 3: TOTALES ===================
for row2 in range(3):
    datosEntry2 = Label(labelframe1, text="Valor Total")
    datosEntry2.grid(row=0, column=2, sticky="nsew")
    datosEntry2 = Entry(labelframe1)
    datosEntry2.grid(row=row2, column=2)
    # total_parcial.append(datosEntry2)


# COLUMN 4: SUMINISTROS ===================
entries_suministros = {}
for row3 in range(3):
    datosEntry3 = Label(labelframe1, text="Suministros")
    datosEntry3.grid(row=0, column=3, sticky="nsew")
    datosEntry3 = Entry(labelframe1)
    datosEntry3.grid(row=row3, column=3)
    entries_suministros["Entrybox{0}".format(row3)] = datosEntry3  # Entry

# COLUMN 5: MANO DE OBRA ===================
entries_mo = {}
for row4 in range(3):
    datosEntry4 = Label(labelframe1, text="Mano de Obra")
    datosEntry4.grid(row=0, column=4, sticky="nsew")
    datosEntry4 = Entry(labelframe1)
    datosEntry4.grid(row=row4, column=4)
    entries_mo["Entrybox{0}".format(row4)] = datosEntry4  # Entry

###################################################################################
############ =============  BUTTON  ================== ##########################
# BUTTON 1:  =============================
calcular1 = Button(root, text="Send for Operations", command=GuardarDatos)
calcular1.pack()


root.mainloop()







Tags: textinforcolumnvalorgridrowentries