Creación de Una Interfaz Gráfica Con Python en Digsilent PowerFactory
Creación de Una Interfaz Gráfica Con Python en Digsilent PowerFactory
Lima, Perú
2023
Interfaz Gráfica de Usuario (GUI) en Python
GUI’s
Índiceen Python
Tkinter
Índice
❑ Evento
o Conjunto de acciones a realizarse
definidos dentro de una función
❑ Botón
o Es un widget que permite la ejecución de
un evento tras ser presionado.
o Para ser usado, debe importarse el
módulo de temas de Tkinter (ttk).
o Para ser ubicado en la ventana, debe
emplearse el método grid.
from tkinter import ttk
def evento():
print('Ha sido presionado el botón')
import sys
sys.path.append(Ruta Carpeta Python)
import powerfactory as pf
app = pf.GetApplication()
user = app.GetCurrentUser()
proj = user.GetContents('*.IntPrj')
proj[0].Activate() # En este caso estoy activando el 1er elemento de la lista proj
Crear una interfaz gráfica que permita al usuario realizar la siguiente secuencia:
❑ Enlace con PowerFactory y obtención de todos los Proyectos del Usuario Activo:
app = pf.GetApplication()
app.Show() # Opcional, si se desea que se abra una ventana con el programa
user = app.GetCurrentUser() # Retorna el Usuario Activo del programa
proj = user.GetContents('*.IntPrj') # Retorna los proyectos del Usuario Activo (Lista)
Aplicación
Índice
❑ Eventos - I
def fun1():
if DataList1.get() == '':
app.PrintPlain('Alerta, no has elegido ningun proyecto')
else:
user.GetContents(DataList1.get()+'.IntPrj')[0].Activate() # Llama a los proyectos
ce = app.GetProjectFolder('study').GetContents('*.IntCase') # Llama a los CE’s
DataList2.config(state=tk.ACTIVE, values = [ii.loc_name for ii in ce])
# CE = Caso de Estudio
def fun2():
if DataList2.get() == '':
app.PrintPlain('Alerta, no has elegido ningun caso de estudio')
else:
folder = app.GetProjectFolder('study’) # Llama al folder de Casos de Estudio
folder.GetContents(DataList2.get()+'.IntCase')[0].Activate() # Activa Caso de Est.
lineas = app.GetCalcRelevantObjects('*.ElmLne’) # Llama a las LLTT’s
DataList3.config(state=tk.ACTIVE, values = [ii.loc_name for ii in lineas])
Aplicación
Índice
❑ Eventos - II
def fun3():
if DataList3.get() == '':
app.PrintPlain('Alerta, no has elegido ninguna linea de transmision')
else:
ldf = app.GetFromStudyCase('ComLdf’) # Busca al objeto Flujo de Carga
app.EchoOff() # Desactiva los mensajes en el Output Window
ldf.Execute() # Ejecuta un Flujo de Carga
app.EchoOn() # Activa los mensajes en el Output Window
lt = app.GetCalcRelevantObjects(DataList3.get()+'.ElmLne')[0]
if lt. HasAttribute('c:loading’): # Verifica si tiene resultados de calculo
app.PrintPlain(lt.GetAttribute('c:loading’)) # Imprime su cargabilidad
else:
app.PrintPlain('No tiene cargabilidad’) # Imprime otro mensaje
Aplicación
Índice
# Ventana de la GUI
ventana = tk.Tk()
ventana.geometry('550x150')
ventana.title('Aplicacion')
# DataList
DataList1 = ttk.Combobox(ventana, width=40, values= [ii.loc_name for ii in proj] )
DataList1.grid(row=0, column=0)
DataList2 = ttk.Combobox(ventana, width=40, state = tk.DISABLED)
DataList2.grid(row=1, column=0)
DataList3 = ttk.Combobox(ventana, width=40, state = tk.DISABLED)
DataList3.grid(row=2, column=0)
Aplicación
Índice
# Boton
boton1 = ttk.Button(ventana, text = 'Activar', command = fun1)
boton1.grid(row = 0, column = 1)