En esta
entrada se realiza la interfaz gráfica del factor volumétrico del petróleo, 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
Onceava_Ventana = Tk()
Onceava_Ventana.geometry("450x200")
Onceava_Ventana.maxsize(450,200)
Onceava_Ventana.minsize(450,200)
Onceava_Ventana.title("Factor Volumétrico del Petróleo")
Onceava_Ventana.configure(background="gray80",highlightbackground="gray80",highlightcolor="black")
Valores = ["Standing, M.B.","Vázquez, M.E. y
Beggs, H.D.","Glaso, O.","TOTAL,
C.F.P.","Al-Marhoun, M.A.","Dokla, M.E. y Osman,
M.E.","Petrosky, G.E., Jr. y Farshad, F.F.","Kartoatmodjo,
T. y Schmidt, Z."]
Variable = tk.StringVar()
Visor_correlaciones = ttk.Combobox(Onceava_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_Rgb(event):
try:
#API
= 31
#Co = 9.62*10**-6
#PB = 2500
#T = 180
#Yg = 0.95
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
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")
else:
if
P >= Pb:
Pb
= Pb
elif
P <= Pb:
Pb
= P
else:
print("Error
Fatal, Reinicie el Equipo ")
Yo
= 141.5/(API+131.5)
#Correlación
Standing, M.B. para p = 4000 psi (p>pb), por lo que Rs = Rsb
Rsb =
Yg*(((Pb/18.2)+1.4)*10**(0.0125*API-0.000917*T))**1.2048
if
str(Variable.get()) == Valores[0]:
#
Correlación de Standing, M.B.
F
= Rsb*(np.sqrt(Yg/Yo))+1.25*T
Bob1
= 0.9759+12*10**-5*F**1.2
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bob1,4))
elif
str(Variable.get()) == Valores[1]:
#
Correlación de Vázquez, M.E. y Beggs, H.D.
if
API <= 30:
C1
= 4.677*10**-4
C2 = 1.751*10**-5
C3 = -1.8106*10**-8
elif
API > 30:
C1
= 4.670*10**-4
C2 = 1.100*10**-5
C3 = 1.3370*10**-9
Bob2
= 1+(C1*Rsb)+C2*(T-60)*(API/Yg)+C3*Rsb*(T-60)*(API/Yg)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bob2,4))
elif
str(Variable.get()) == Valores[2]:
#
Correlación de Glaso, O.
F
= Rsb*((Yg/Yo)**0.526)+0.968*T
Bob3
= 1+10**(-6.58511+2.91329*np.log10(F)-0.27683*(np.log10(F)**2))
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bob3,4))
elif
str(Variable.get()) == Valores[3]:
#
Correlación de la TOTAL, C.F.P.
Bob4
= 1.022+(4.857*10**-4*Rsb)-2.009*10**-6*(T-60)*(API/Yg)+17.569*10**-9*Rsb*(T-60)*(API/Yg)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bob4,4))
elif
str(Variable.get()) == Valores[4]:
#Correlación
de Al-Marhoun, M.A.
F
= (Rsb**0.74239)*(Yg**0.323294)*(Yo**-1.20204)
Bob5
=
0.497069+((0.862963*10**-3)*(T+460))+((0.182594*10**-2)*F)+((0.318099*10**-5)*F**2)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bob5,4))
elif
str(Variable.get()) == Valores[5]:
#
Correlación de Dokla, M.E. y Osman, M.E.
F
= (Rsb**0.773572)*(Yg**0.40402)*(Yo**-0.882605)
Bob6
=
(0.431935*10**-1)+((0.156667*10**-2)*(T+460))+((0.139775*10**-2)*F)+(0.380525*10**-5)*(F**2)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bob6,4))
elif
str(Variable.get()) == Valores[6]:
#
Correlación de Petrosky, G.E., Jr. y Farshad, F.F.
F
= Rsb**0.3738*((Yg**0.2914)/(Yo**0.6265))+0.24626*T**0.5371
Bob7
= 1.0113+(7.2046*10**-5)*(F**3.0936)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bob7,4))
elif
str(Variable.get()) == Valores[7]:
#
Correlación de Kartoatmodjo, T. y Schmidt, Z.
F
= Rsb**0.755*Yg**0.25*Yo**-1.5+0.45*T
Bob8
= 0.9846+(1*10**-4)*(F**1.5)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bob8,4))
elif str(Variable.get())
== Valores[8]:
#
La presión está por encima de la presión de burbuja.
F
= Rsb*((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))
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bo,4))
else:
messagebox.showwarning("Advertencia!","La
opción seleccionada rompio la realidad")
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_Rgb)
def Presion():
Visor_correlaciones.configure(takefocus="",state="disable")
try:
#API
= 31
#Co = 9.62*10**-6
#PB = 2500
#T = 180
#Yg = 0.95
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())
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")
else:
Yo
= 141.5/(API+131.5)
if
P > Pb:
#Correlación
Standing, M.B. para p = 4000 psi (p>pb), por lo que Rs = Rsb
Rsb = Yg*(((Pb/18.2)+1.4)*10**(0.0125*API-0.000917*T))**1.2048
#
La presión está por encima de la presión de burbuja.
F
= Rsb*((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))
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,round(Bo,4))
elif
P < Pb:
Visor_correlaciones.configure(takefocus="",state="readonly")
else:
print("Error
en la presión")
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
var = StringVar(Onceava_Ventana,0)
Radiobutton1 =
tk.Checkbutton(Onceava_Ventana,text='''Presión > Presión de
Burbuja''',onvalue = 0,variable= var,background="gray80",command =
Presion).place(relx=0.53, rely=0.02, relheight=00.11, relwidth=0.450,
bordermode='ignore')
Recuadro_Entradas = tk.LabelFrame(Onceava_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.Label(Recuadro_Entradas)
Mensaje_7.place(relx=0.21, rely=0.62, height=25, width=140)
Mensaje_7.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Resultado:''')
Mensaje_8 = tk.Label(Recuadro_Entradas)
Mensaje_8.place(relx=0.85, rely=0.62, height=25, width=50)
Mensaje_8.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')
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)
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)
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)
Onceava_Ventana.mainloop()
El
código devuelve lo siguiente:
from tkinter import *
import tkinter as tk
from tkinter import ttk
import numpy as np
from tkinter import messagebox
Onceava_Ventana.geometry("450x200")
Onceava_Ventana.maxsize(450,200)
Onceava_Ventana.minsize(450,200)
Onceava_Ventana.title("Factor Volumétrico del Petróleo")
Onceava_Ventana.configure(background="gray80",highlightbackground="gray80",highlightcolor="black")
Visor_correlaciones = ttk.Combobox(Onceava_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)
#Co = 9.62*10**-6
#PB = 2500
#T = 180
#Yg = 0.95
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
C2 = 1.751*10**-5
C3 = -1.8106*10**-8
C2 = 1.100*10**-5
C3 = 1.3370*10**-9
else:
#Co = 9.62*10**-6
#PB = 2500
#T = 180
#Yg = 0.95
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())
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.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.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Co''')
Mensaje_7.place(relx=0.21, rely=0.62, height=25, width=140)
Mensaje_7.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Resultado:''')
Mensaje_8 = tk.Label(Recuadro_Entradas)
Mensaje_8.place(relx=0.85, rely=0.62, height=25, width=50)
Mensaje_8.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''BY/BN''')
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.place(relx=0.02, rely=0.46, height=20, width=80)
Entrada_6.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
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_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)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_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)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)

No hay comentarios.:
Publicar un comentario