Python - один из скриптовых языков в котором реализованы принципы объектно ориентированного программирования.

Интерпретатор языка и стандартные библиотеки свободно и бесплатно доступны как в бинарной форме, так и в виде исходных кодов на сайте http://www.python.org.

ActiveState предоставляет ActivePython - реализацию интерпретатора для Windows, которая доступна на сайте http://www.activestate.com, и имеет поддержку COM, необходимую для использования WSO. Для полного взаимодействия с WSO написан небольшой модуль wso.py, в котором описана процедура getref для получения ссылок на процедуры и передачи их в WSO.

Примеры на этом языке тестировались на версии ActivePython 2.3.

Пример программы:

from wso import *

wso = win32com.client.Dispatch("Scripting.WindowSystemObject")

wso.EnableVisualStyles = 1

form = wso.CreateForm(0,0,0,0)
form.ClientWidth = 150
form.ClientHeight = 100
form.CenterControl()

def ButtonClick(sender):
        sender.Form.Close()

button = form.CreateButton(10,10,75,25,"Close")

button.OnClick = getref(ButtonClick)

form.Show()

wso.Run()

QuickStart.jpg

См. также:
Больше примеров в папке Demo\Python.
Модуль wso.py подключается например следующим образом:

from wso import *

или

import wso

при использовании первого варианта все имена модуля добавляются к текущему пространству имен, и для доступа к процедуре getref не требуется указывать имя модуля. Во втором случае для доступа к процедуре getref требуется указывать имя модуля в виде: wso.getref. Более подробно о подключении модулей можно прочитать в документации Python.

Для использования wso нужно подключить модули поддержки COM. Это делается в модуле wso.py (таким образом, если используется этот модуль их можно отдельно не подключать) следующим образом:

import pythoncom
import win32com.client

дополнительно можно подключить модуль WSOConsts, в котором объявлены константы.

Создание объекта WindowSystemObject осуществляется например так:

o = win32com.client.Dispatch("Scripting.WindowSystemObject")

Задание обработчиков событий с использованием модуля wso осуществляется через второй или третий уровень с использованием процедуры getref, например:

def OnMouseUp (sender,x,y,button,flags):
	sender.Form.MessageBox("OnMouseUp")

form.OnMouseMove = getref(OnMouseUp)

Заметки:
требуется указывать точно все параметры в обработчике событий или указывать некоторые первые из них и далее *arg, например
def OnMouseUp (sender,x,y,*arg):
	sender.Form.MessageBox("OnMouseUp")

Примеры на языке Python находятся в каталоге WSO в подкаталоге Demo\Python. Один из примеров:

#WindowSystemObject (WSO) example
#Copyright (C) Veretennikov A. B. 2004

from wso import *
from wsosamples import *

o = win32com.client.Dispatch("Scripting.WindowSystemObject")

f = o.CreateForm(0,0,650,400)
f.CenterControl()

def MouseMove(sender,x,y,flags):
	sender.Form.StatusBar[0].Text = str(x)+" x "+str(y)

def MouseExit(sender):
	sender.Form.StatusBar[0].Text = "No Mouse In Control"

def MouseUp(sender,x,y,button,flags):
	sender.Form.MessageBox("MouseUp "+str(x)+" x "+str(y)+", Button = "+str(button));

def KeyDown(sender,key,flags):
	if (key != 27) and (key != 112): sender.Form.MessageBox("KeyDown "+str(key))

def ButtonClick(sender):
	sender.Form.MessageBox("Button "+sender.text+": OnClick")

def CloseFormHandler(sender):
	sender.Form.Close()

CanCloseVar = 1

def OKResult(sender):
	global CanCloseVar
	CanCloseVar = 1
	sender.Form.Close()

def HelpAbout(sender):
	AboutWSO(sender,"Event Handler Sample")

def CanClose(sender,resultptr):
	global CanCloseVar
	CanCloseVar = 0
	CanCloseDialog = f.CreateDialogForm(0,0,510,100)
	CanCloseDialog.CenterControl()
	CanCloseDialog.TextOut(10,10,"Do you really want to quit this program?")

	YesButton = CanCloseDialog.CreateButton(10,30,75,25,"Yes")
	YesButton.OnClick = getref(OKResult)
	YesButton.Default = 1

	NoButton = CanCloseDialog.CreateButton(90,30,75,25,"No")
	NoButton.OnClick = getref(CloseFormHandler)
	NoButton.Cancel = 1

	HelpButton = CanCloseDialog.CreateButton(170,30,75,25,"Help")
	HelpButton.OnClick = getref(HelpAbout)

	CanCloseDialog.HelpButton = HelpButton
	CanCloseDialog.Color = 0xFF00FF
	CanCloseDialog.ShowModal()
	CanCloseDialog.Destroy()
	resultptr.Put(CanCloseVar)

Button = f.CreateButton(10,10,75,25,"Demo")

Button.AddEventHandler("OnClick",getref(ButtonClick))

CancelButton = f.CreateButton(100,10,75,25,"Close")
CancelButton.OnClick = getref(CloseFormHandler)

f.CreateStatusBar().Name = "StatusBar"
f.StatusBar.Add(100).AutoSize = 1
f.OnMouseMove = getref(MouseMove)
f.OnMouseLeave = getref(MouseExit)
f.OnMouseUp = getref(MouseUp)
f.OnKeyDown = getref(KeyDown)
f.OnCloseQuery = getref(CanClose)

Text1 = f.TextOut(10,60,"WindowSystemObject")
Text1.Font.Size = 16
Text1.Color = 255
Text1.Font.Bold = 1

f.TextOut(10,100,"This sample shows how to handle events from WindowsSystemObject using Python.\x0D\x0DClicking any mouse button invokes OnMouseUp event handler.\x0D\x0DMoving mouse inside this window invokes OnMouseMove event handler.\x0D\x0D(The current mouse position is displayed in the status bar)\x0D\x0DMoving mouse outside this window invokes OnMouseLeave event handler.\x0D\x0DClicking Demo or Close buttons invokes OnClick event handler.\x0D\x0DPressing any key invokes OnKeyDown event handler.\x0D\x0DTry to close this window to invoke OnCloseQuery event.")

FileMenu = f.Menu.Add("File")
FileMenu.Add("Exit",27).OnExecute = getref(CloseFormHandler)

HelpMenu = f.Menu.Add("Help")
HelpMenu.Add("About","F1").OnExecute = getref(HelpAbout)

f.Show()

o.Run()

Заметки:
wso.py находится в папке Demo\Python.

Документация по WSO 1.1. Последние изменения:Wed Aug 12 18:10:22 2015. (C) Веретенников А. Б. 2004-2015