miércoles, 18 de mayo de 2022

Tkinter Factor Volumétrico Total

En esta entrada se realiza la interfaz gráfica del factor volumétrico total, a continuación se muestra el código completo:


import math as math
from tkinter import *
import tkinter as tk
from tkinter import ttk
import numpy as np
from tkinter import messagebox


Ventana = Tk()
Ventana.geometry("450x200")
Ventana.maxsize(450,200)
Ventana.minsize(450,200)
Ventana.title("Factor Volumétrico Total")
Ventana.configure(background="gray80",highlightbackground="gray80",highlightcolor="black")


Valores = ["Factor Volumétrico Total  P > Pb","Glaso, O.","Al-Marhoun, M.A."]


Variable = tk.StringVar()
Visor_correlaciones = ttk.Combobox(Ventana)
Visor_correlaciones.place(relx=0.01, rely=0.01, relheight=0.11, relwidth=0.500, bordermode='ignore')
Visor_correlaciones.configure(takefocus="",state="readonly",textvariable = Variable, justify = "center",values = Valores)
Visor_correlaciones.current(0)


def Correlaciones_FVT(event):


try:


# P = 2000
# Pb = 2500 
# T = 180   
# API = 31  
# Yg = 0.95
# Z = 0.68
# Rsi = 673
# Rs = 516
# Bo = 1.32170
# Co = 9.62*10**-6
# Ppr = 1.54; Tpr = 1.30


P   = float(Entrada_1.get())   # psi
Pb  = float(Entrada_2.get())  # psi
T   = float(Entrada_3.get())   # °F
API = float(Entrada_4.get()) # °API 
Yg  = float(Entrada_5.get())
Co  = float(Entrada_6.get())  #1/psi
Tpr = float(Entrada_7.get())
Ppr = float(Entrada_8.get())  


if P <= 0:


messagebox.showwarning("Advertencia!","La Presión es incorrecta")


elif Pb <= 0:


messagebox.showwarning("Advertencia!","La Presión de burbuja es incorrecta")


elif T <= 0:


messagebox.showwarning("Advertencia!","La Temperatura del separador es incorrecta")


elif API <= 0:


messagebox.showwarning("Advertencia!","La Gravedad API es incorrecta")


elif Yg <= 0:


messagebox.showwarning("Advertencia!","La Densidad del gas es incorrecta")


elif Co <= 0:


messagebox.showwarning("Advertencia!","La Compresibilidad del petróleo es incorrecta")


elif Tpr <= 0:


messagebox.showwarning("Advertencia!","La Temperatura pseudoreducida es incorrecta")


elif Ppr <= 0:


messagebox.showwarning("Advertencia!","La Presión pseudoreducida es incorrecta")


else:


Yo = 141.5/(API+131.5)


# Correlación del Factor Z


z = 1- ((3.52*Ppr)/(10**(0.9813*Tpr)))+((0.274*(Ppr**2))/(10**(0.8157*Tpr)))


# Correlación del Factor de volumen del gas


Bg = 0.00503*((z*(T+460))/P)


if P >= Pb:


if str(Variable.get()) == Valores[0]:


Pb = Pb


# Correlación Standing, M.B. condiciones iniciales


Rsi  = Yg*(((P/18.2)+1.4)*10**(0.0125*API-0.000917*T))**1.2048


# Correlación Standing, M.B. condiciones de burbuja


Rs  = Yg*(((Pb/18.2)+1.4)*10**(0.0125*API-0.000917*T))**1.2048


# Factor Volumen Total


F = Rs*((Yg/Yo)**0.526)+0.968*T
Bob = 1+10**(-6.58511+2.91329*np.log10(F)-0.27683*(np.log10(F)**2))
Bo = Bob*np.exp(Co*(Pb-P))
Bt1 = Bo+(Rsi-Rs)*Bg
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bt1,4))


else:


messagebox.showwarning("Advertencia!","La Presión es mayor a la presión de burbuja")


elif P <= Pb:


Pb = P 


if str(Variable.get()) == Valores[1]:



# Correlación Standing, M.B. condiciones de burbuja


Rs  = Yg*(((Pb/18.2)+1.4)*10**(0.0125*API-0.000917*T))**1.2048


# Correlación de Glaso, O.


F = Rs*((T**0.5)/(Yg**0.3))*(P**-1.1089)*(Yo**(2.9*10**(-0.00027*Rs)))
Bt2 = 10**((8.0135*10**-2)+(4.7257*10**-1)*np.log10(F)+(1.7351*10**-1)*np.log10(F)**2)

Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bt2,4))


elif str(Variable.get()) == Valores[2]:


# Correlación Standing, M.B. condiciones de burbuja


Rs  = Yg*(((Pb/18.2)+1.4)*10**(0.0125*API-0.000917*T))**1.2048


# Correlación de Al-Marhoun, M.A.


F = (Rs**0.644516)*(Yg**-1.07934)*(Yo**0.724874)*(P**-0.76191)*((T+460)**2.00621)
Bt3 = 0.314693+(0.106253*(10**-4))*F+(0.18883*10**-10)*(F**2)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bt3,4))


else:


messagebox.showwarning("Advertencia!","La Presión es menor a la presión de burbuja")


else:


print("Error Fatal, Reinicie el Equipo ")


except ZeroDivisionError:


messagebox.showwarning("Advertencia!","Los datos ingresados son incorrectos, por favor revisalos")


except SyntaxError:


messagebox.showwarning("Advertencia!","Los datos ingresados son incorrectos, por favor revisalos")


except ValueError:


messagebox.showwarning("Advertencia!","Los datos ingresados son incorrectos, por favor revisalos")


finally:


pass


return


Visor_correlaciones.bind('<<ComboboxSelected>>', Correlaciones_FVT)


Recuadro_Entradas = tk.LabelFrame(Ventana)
Recuadro_Entradas.place(relx=0.01, rely=0.13, relheight=0.850, relwidth=0.980)
Recuadro_Entradas.configure(relief='groove',foreground="black",text='''Entradas''',background="gray80",highlightbackground="gray80",highlightcolor="black",width=330)


Mensaje_1 = tk.Message(Recuadro_Entradas)
Mensaje_1.place(relx=0.02, rely=0.01, height=25, width=80)
Mensaje_1.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''P''')
Mensaje_2 = tk.Message(Recuadro_Entradas)
Mensaje_2.place(relx=0.21, rely=0.01, height=25, width=80)
Mensaje_2.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Pb''')
Mensaje_3 = tk.Message(Recuadro_Entradas)
Mensaje_3.place(relx=0.40, rely=0.00, height=25, width=80)
Mensaje_3.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''T''')
Mensaje_4 = tk.Message(Recuadro_Entradas)
Mensaje_4.place(relx=0.60, rely=0.00, height=25, width=80)
Mensaje_4.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''°API''')
Mensaje_5 = tk.Message(Recuadro_Entradas)
Mensaje_5.place(relx=0.80, rely=0.00, height=25, width=80)
Mensaje_5.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Yg''')
Mensaje_6 = tk.Message(Recuadro_Entradas)
Mensaje_6.place(relx=0.02, rely=0.30, height=25, width=80)
Mensaje_6.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Co''')
Mensaje_7 = tk.Message(Recuadro_Entradas)
Mensaje_7.place(relx=0.21, rely=0.30, height=25, width=80)
Mensaje_7.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Tpr''')
Mensaje_8 = tk.Message(Recuadro_Entradas)
Mensaje_8.place(relx=0.40, rely=0.30, height=25, width=80)
Mensaje_8.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Ppr''')
Mensaje_9 = tk.Label(Recuadro_Entradas)
Mensaje_9.place(relx=0.21, rely=0.62, height=25, width=140)
Mensaje_9.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Resultado:''')
Mensaje_10 = tk.Label(Recuadro_Entradas)
Mensaje_10.place(relx=0.85, rely=0.62, height=25, width=50)
Mensaje_10.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''BY/BN''')

Entrada_1 = tk.Entry(Recuadro_Entradas)
Entrada_1.place(relx=0.02, rely=0.18, height=20, width=80)
Entrada_1.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_2 = tk.Entry(Recuadro_Entradas)
Entrada_2.place(relx=0.21, rely=0.18, height=20, width=80)
Entrada_2.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_3 = tk.Entry(Recuadro_Entradas)
Entrada_3.place(relx=0.40, rely=0.18, height=20, width=80)
Entrada_3.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_4 = tk.Entry(Recuadro_Entradas)
Entrada_4.place(relx=0.60, rely=0.18, height=20, width=80)
Entrada_4.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_5 = tk.Entry(Recuadro_Entradas)
Entrada_5.place(relx=0.80, rely=0.18, height=20, width=80)
Entrada_5.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_6 = tk.Entry(Recuadro_Entradas)
Entrada_6.place(relx=0.02, rely=0.46, height=20, width=80)
Entrada_6.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_7 = tk.Entry(Recuadro_Entradas)
Entrada_7.place(relx=0.21, rely=0.46, height=20, width=80)
Entrada_7.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_8 = tk.Entry(Recuadro_Entradas)
Entrada_8.place(relx=0.40, rely=0.46, height=20, width=80)
Entrada_8.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Salida_1 = tk.Entry(Recuadro_Entradas)
Salida_1.place(relx=0.50, rely=0.64, height=20, width=140)
Salida_1.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')

Entrada_1.delete(0,tk.END);Entrada_1.insert(tk.END,"");Entrada_1.insert(tk.END,0.00)
Entrada_2.delete(0,tk.END);Entrada_2.insert(tk.END,"");Entrada_2.insert(tk.END,0.00)
Entrada_3.delete(0,tk.END);Entrada_3.insert(tk.END,"");Entrada_3.insert(tk.END,0.00)
Entrada_4.delete(0,tk.END);Entrada_4.insert(tk.END,"");Entrada_4.insert(tk.END,0.00)
Entrada_5.delete(0,tk.END);Entrada_5.insert(tk.END,"");Entrada_5.insert(tk.END,0.00)
Entrada_6.delete(0,tk.END);Entrada_6.insert(tk.END,"");Entrada_6.insert(tk.END,0.00)
Entrada_7.delete(0,tk.END);Entrada_7.insert(tk.END,"");Entrada_7.insert(tk.END,0.00)
Entrada_8.delete(0,tk.END);Entrada_8.insert(tk.END,"");Entrada_8.insert(tk.END,0.00)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)

def Limpiando():

Visor_correlaciones.configure(takefocus="",state="readonly",textvariable = Variable, justify = "center",values = Valores)

Entrada_1.delete(0,tk.END);Entrada_1.insert(tk.END,"");Entrada_1.insert(tk.END,0.00)
Entrada_2.delete(0,tk.END);Entrada_2.insert(tk.END,"");Entrada_2.insert(tk.END,0.00)
Entrada_3.delete(0,tk.END);Entrada_3.insert(tk.END,"");Entrada_3.insert(tk.END,0.00)
Entrada_4.delete(0,tk.END);Entrada_4.insert(tk.END,"");Entrada_4.insert(tk.END,0.00)
Entrada_5.delete(0,tk.END);Entrada_5.insert(tk.END,"");Entrada_5.insert(tk.END,0.00)
Entrada_6.delete(0,tk.END);Entrada_6.insert(tk.END,"");Entrada_6.insert(tk.END,0.00)
Entrada_7.delete(0,tk.END);Entrada_7.insert(tk.END,"");Entrada_7.insert(tk.END,0.00)
Entrada_8.delete(0,tk.END);Entrada_8.insert(tk.END,"");Entrada_8.insert(tk.END,0.00)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)


return


Limpieza = Button(Recuadro_Entradas,activebackground="OliveDrab4",activeforeground="black",background="gray80",disabledforeground="#a3a3a3",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",pady="0",text='''Limpieza''', command = Limpiando).place(relx = 0.23, rely = 0.80, height=25, width=217)


Ventana.mainloop()


El código devuelve lo siguiente:




No hay comentarios.:

Publicar un comentario