100% encontró este documento útil (1 voto)
205 vistas18 páginas

Creación de Una Interfaz Gráfica Con Python en Digsilent PowerFactory

Este documento describe cómo crear una interfaz gráfica en Python para interactuar con DIgSILENT PowerFactory. La interfaz permite al usuario elegir un proyecto, caso de estudio y línea de transmisión de una lista desplegable, y ejecutar un flujo de carga para mostrar la cargabilidad de la línea seleccionada. Se utiliza la librería Tkinter para la interfaz y powerfactory para enlazar con PowerFactory en modo ENGINE y acceder a sus objetos.

Cargado por

Gonzalo Franklin
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
205 vistas18 páginas

Creación de Una Interfaz Gráfica Con Python en Digsilent PowerFactory

Este documento describe cómo crear una interfaz gráfica en Python para interactuar con DIgSILENT PowerFactory. La interfaz permite al usuario elegir un proyecto, caso de estudio y línea de transmisión de una lista desplegable, y ejecutar un flujo de carga para mostrar la cargabilidad de la línea seleccionada. Se utiliza la librería Tkinter para la interfaz y powerfactory para enlazar con PowerFactory en modo ENGINE y acceder a sus objetos.

Cargado por

Gonzalo Franklin
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 18

Creación de una Interfaz Gráfica

con Python en DIgSILENT


PowerFactory
Autor:
Fernando Antonio I. De la Cruz T.
[email protected]

Lima, Perú
2023
Interfaz Gráfica de Usuario (GUI) en Python
GUI’s
Índiceen Python
Tkinter
Índice

Es el estándar de Python para el desarrollo de GUI’s. Un ejemplo básico es el siguiente:

import tkinter as tk # Importar el módulo Tkinter

ventana = tk.Tk() # Creación de un objeto Tk


ventana.geometry('300x400') # Especificando el tamaño de la ventana
ventana.title('Nueva Ventana') # Nombre de la ventana

ventana.mainloop() # Inicializar la ventana, debe ubicarse al final del código


Tkinter
Índice – Manejo de Botones

❑ 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')

boton = ttk.Button(ventana, text = 'Dar Click', command = evento)


boton.grid(row = 0, column = 0)
Tkinter
Índice – Manejo de DataList

❑ DataList (combo – box)


o Es una componente de Tkinter que
permite mostrar una lista desplegable.
o Su anchura es modificable mediante el
parámetro width y los valores que
muestra son los especificados en el
parámetro values.

Lista = ['A', 'B', 'C', 'D', 'E']


DataList = ttk.Combobox(ventana, width=10, values = Lista)
DataList.grid(row = 1, column = 0)

o Es posible acceder al valor elegido


mediante el método get():
DataList.get()

o Asimismo, cuando no se tiene


seleccionado una opción, el código
anterior retorna una cadena vacía “”
Modo ENGINE en DIgSILENT PowerFactory
Modo
Índice ENGINE

❑ En el Modo ENGINE, PowerFactory se puede importar y ejecutar desde un script de


Python externo, sin la necesidad de una interfaz gráfica de usuario. Este modo
permite integrar sin problemas la funcionalidad de PowerFactory en cualquier
programa de Python y viceversa.
❑ Para importar el módulo dinámico powerfactory.pyd en una secuencia de
comandos de Python, la ubicación del módulo debe agregarse a la ruta de Python,
para que el intérprete de Python se dé cuenta de su existencia.

import sys
sys.path.append(Ruta Carpeta Python)

❑ La ruta es de la carpeta correspondiente a la versión de Python donde se trabaje.


Modo
Índice ENGINE

❑ Una vez que se ha importado el módulo dinámico, el método pf.GetApplication


inicia PowerFactory en Modo ENGINE.

import powerfactory as pf
app = pf.GetApplication()

❑ Se recomienda ejecutar la función GetCurrentUser a fin de obtener la referencia del


usuario activo y con ello, acceso a sus proyectos (‘*.IntPrj’) mediante el método
GetContents(). Posteriormente al elegir un proyecto de la lista almacenada en la
variable proj, se activa empleando el método Activate.

user = app.GetCurrentUser()
proj = user.GetContents('*.IntPrj')
proj[0].Activate() # En este caso estoy activando el 1er elemento de la lista proj

❑ Asimismo, si se desea visualizar el programa PowerFactory, es posible mediante el


método Show():
app.Show()
Aplicación
Aplicación
Índice

Crear una interfaz gráfica que permita al usuario realizar la siguiente secuencia:

❑ Elegir un Proyecto por medio de un DataList y activarlo con un botón


❑ Elegir un Caso de Estudio por medio de un DataList y activarlo con un botón
❑ Elegir una Línea de Transmisión por medio de un DataList
❑ Crear un botón que ejecute un Flujo de Carga e imprima la cargabilidad de la Línea
de Transmisión.
Aplicación
Índice

❑ Preámbulo de módulos necesarios:

# Incorporando la libreria powerfactory


import sys
sys.path.append(r'C:\Program Files\DIgSILENT\PowerFactory 2021 SP2\Python\3.9')
import powerfactory as pf

# Incorporando la libreria Tkinter


import tkinter as tk
from tkinter import ttk

❑ 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

❑ Código de la Interfaz Gráfica - I

# 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

❑ Código de la Interfaz Gráfica - II

# Boton
boton1 = ttk.Button(ventana, text = 'Activar', command = fun1)
boton1.grid(row = 0, column = 1)

boton2 = ttk.Button(ventana, text = 'Activar', command = fun2)


boton2.grid(row = 1, column = 1)

boton3 = ttk.Button(ventana, text = 'Activar', command = fun3)


boton3.grid(row = 2, column = 1)

ventana.mainloop() # Fin del codigo


Aplicación
Índice
¡Muchas gracias!
: (+51) 963 128 541

: [email protected]

: Fernando Antonio I. De la Cruz T.

También podría gustarte