# -*- coding: iso-8859-1 -*-
# Référence : wxPython in Action from Robin Dunn - Noel Rappin
import os
import wx
ID_ABOUT = wx.NewId()
ID_OPEN = wx.NewId()
ID_EXIT = wx.NewId()
tree = [
['Dakar',
['Administration',
['Supervision',
['Disques','Banques','File d''attentes']],
'Réseaux'],
], #/Dakar
['Denver',
['Administration','Supervision','Réseaux'],
] #/Denver
]
class TreeServeur(wx.TreeCtrl):
def __init__(self, parent,id):
super(TreeServeur, self).__init__(parent,id)
self.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.OnExpandItem)
self.Bind(wx.EVT_TREE_ITEM_COLLAPSING, self.OnCollapseItem)
self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivated)
root = self.AddRoot("Serveurs")
self.AddTreeNodes(root,tree)
def AddTreeNodes(self, parentItem, items):
for item in items:
if type(item) == str:
self.AppendItem(parentItem, item)
else:
newItem = self.AppendItem(parentItem, item[0])
self.AddTreeNodes(newItem, item[1])
def OnExpandItem(self, evt):
pass
def OnCollapseItem(self,evt):
pass
def OnActivated(self,evt):
print "OnActivated: ", self.GetItemText(evt.GetItem())
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(1024, 800))
self.initpos = 50
#Status Bar
self.CreateStatusBar()
#Menu Fichier
filemenu = wx.Menu()
filemenu.Append(ID_OPEN,'&Ouvrir')
filemenu.Append(ID_EXIT,'&Quitter')
#Menu Aide
aidemenu = wx.Menu()
aidemenu.Append(ID_ABOUT,'&Aide')
#Barre de Menu
menubar = wx.MenuBar()
menubar.Append(filemenu,'&Fichier')
menubar.Append(aidemenu,'&Aide')
self.SetMenuBar(menubar)
#Gestionnaire d'evenement menu
wx.EVT_MENU(self, ID_ABOUT, self.OnAbout)
wx.EVT_MENU(self, ID_EXIT, self.OnExit)
wx.EVT_MENU(self, ID_OPEN, self.OnOpen)
#Splitter
splitter1 = wx.SplitterWindow(self, -1, style=wx.SP_3D)
splitter1.SetMinimumPaneSize(200)
splitter1.SetSashPosition(40)
splitter1.UpdateSize()
splitter2 = wx.SplitterWindow(splitter1, -1, style=wx.SP_3D)
splitter2.SetMinimumPaneSize(50)
splitter2.SetSashPosition(40)
self.sidebar = TreeServeur(splitter1, id=-1)
self.up =wx.TextCtrl(splitter2, wx.NewId(), "Un texte", size=(100, -1),pos=(80, 50))
self.down = wx.ListCtrl(splitter2, -1, style=wx.LC_LIST)
splitter1.SplitVertically(self.sidebar, splitter2,200)
splitter2.SplitHorizontally(self.up, self.down,0)
self.Centre()
def OnActivated(self,evt):
print "OnActivated: ", self.GetItemText(evt.GetItem())
def ShowMessage(self,msg):
d = wx.MessageDialog(self, msg, style=wx.OK)
d.ShowModal()
d.Destroy()
def OnAbout(self, event):
self.ShowMessage("About")
def OnExit(self,e):
self.Close(True)
def OnOpen(self,e):
#Ouverture d'un fichier"
self.dirname = ""
wildcard = "*.py"
dlg = wx.FileDialog(
self, message="Choose a file",
defaultDir=os.getcwd(),
defaultFile="",
wildcard=wildcard,
style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR
)
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
f = open(path)
self.control.SetValue(f.read())
dlg.Destroy()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, "dragdrop.py")
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(redirect=False)
app.MainLoop()
Tuesday, November 20, 2007
wxPython - TreeControl - SplitPanel
Wednesday, November 7, 2007
Python : HTA
<html>
<head>
<TITLE>HTML Application Example</TITLE>
<HTA:APPLICATION ID="HTAEx" APPLICATIONNAME="HTAEx" ICON="e.ico" WINDOWSTATE="normal">
<style type="text/css">
body {
background-color:#fff;
}
.blank{
color:#ffffff;
}
select {
font-size:0.8em;
font-weight: bold;
text-align:center;
padding:15px;
}
#info {
text-align:left;
background-color: #000;
color: #fff;
padding-left: 5px;
font-size:1em;
}
.patience {
background-color:#ccccee;
width=100%;
text-align:center;
color: #000000;
font-weight: bold;
}
.pair{
background-color: #ccccee;
}
.impair{
background-color: #ffccff;
}
.detail {
padding-right: 10px;
padding-left: 6px;
text-align: right;
}
.Ink {
position: absolute;
background-color: #fff;
border-top: 1px solid transparent;
width: 1px;
height: 1px;
}
</style>
<body onLoad="Initialisation()">
<center><h2>Système d'Administration Simplifié</h2></center>
<table align="center" width="80%" style="border:0px solid black; margin-top:40px;">
<tr><td id="message" style="visibility:hidden;flush="true"">TEST</td></tr>
<tr><th style="background-color:#000;color:#fff;">Serveurs</th><th><div id="info">Informations</div></th></tr>
<tr>
<td width="220px" valign="top">
<div id="tabgauche">
<select size="1" name="liste" onChange="selectServeur()">
<option selected="selected" value="None" class="blank">-----------------------------------------</option>
<option value="1" class="opts"> Dakar</option>
<option value="2" class="opts"> Denver</option>
<option value="3" class="opts"> Douala</option>
<option value="4" class="opts"> Dublin</option>
<option value="NONE" class="opts"><hr /></option>
<option value="5" class="opts"> Fatima</option>
<option value="6" class="opts"> Flores</option>
<option value="7" class="opts"> Francfort</option>
<option value="8" class="opts"> Fresno</option>
<option value="NONE" class="opts"><hr /></option>
<option value="9" class="opts"> Python - 127.0.0.1</option>
</select>
</div>
</td>
<td valign="top">
<div id="tabcentreInfo"></div>
</td>
</tr>
<tr><td colspan="2"><hr /></td></tr>
<tr>
<td valign="top" style="background-color:#fff;">
<div id="svc"> </div>
</td>
<td valign="top">
<div id="tabcentre"> </div>
</td>
</tr>
</table>
<div id="espace"></div>
<!-- Script -->
<script language=Python>
from win32com.client import GetObject,Dispatch
import pythoncom
import win32gui
import os
import thread
import win32api
import locale
import Image,ImageDraw
import cStringIO
from random import randint as rint
import base64
locale.setlocale(locale.LC_NUMERIC, '')
serveurs = {}
services = {}
cmd ={}
Serveur = None
LstService = None
IdServeur = None
Busy = 0
serveurs[1] = ['Dakar']
serveurs[2] = ['Denver']
serveurs[3] = ['Douala']
serveurs[4] = ['Dublin']
serveurs[5] = ['Fatima']
serveurs[6] = ['Flores']
serveurs[7] = ['Francfort']
serveurs[8] = ['Fresno']
serveurs[9] = ["Python"]
svcsysteme = ['systeme','Paramètre Système']
svcbanque = ['banque','Etat des Banques']
svcdisque = ['disque','Espace Disque']
svcstream = ['stream','Streaming']
#Dakar
services[1] = [svcsysteme,svcbanque]
#Denver
services[2] = [svcsysteme,svcbanque]
#Douala
services[3] = [svcsysteme,svcbanque]
#Dublin
services[4] = [svcsysteme,svcbanque]
#Fatima
services[5] = [svcsysteme,svcbanque]
#Flores
services[6] = [svcsysteme,svcbanque]
#Francfort
services[7] = [svcsysteme,svcbanque]
#Fresno
services[8] = [svcsysteme,svcbanque]
#Python
services[9] = [svcsysteme,svcdisque,svcstream]
#Gestion Mouse
def Pointer():
document.body.style.cursor = "hand"
return
def DefaultCursor():
document.body.style.cursor = "default"
return
def WaitCursor():
win32gui.PumpWaitingMessages()
document.body.style.cursor = "wait"
return
#Gestion DIV
def getValue(id):
#return document.getElementById(id).value
return document.getElementById(id).getAttribute("value")
def getElt(id):
return document.getElementById(id)
def setValue(divid,data):
elt = document.getElementById(divid)
elt.innerHTML = data
def showMessage(message="info"):
elt = getElt("message")
elt.innerHTML = message
elt.style.visibility = "visible"
return 1
elt = getElt("message")
elt.style.visibility = "hidden"
def majTabInfo():
elt = getElt('tabcentreInfo')
serveur = serveurs[IdServeur][0]
elt.innerHTML = """<span onClick="connectServer('%s')"
onmouseover='Pointer()'
onmouseout='DefaultCursor()'>
<b>Se connecter</b></span>"""%(serveur)
def groupLstByN(l,n,filter=None):
#group elt in l by n
res = []
k = 0
lp = []
for elt in l:
lp.append(elt)
k +=1
if k == n:
k = 0
res.append(lp)
lp = []
return [tuple(item) for item in res]
def number_format(num, places=0):
s = locale.format("%.*f", (places, num), True)
return s.replace('\xa0',' ')
def formatTable(titre,data):
"""
titre = ["t1",t2"]
data = [["a","b"],["1","2"]]
"""
table = "<table border='1'>"
n = len(titre)
th = r"<th>%s</th>"*n
td = "<td class='detail'>%s</td>"*n
coltitre = th%(tuple(titre))
table += coltitre
i = 0
for item in data:
if i%2 == 0:
table += ("<tr class='pair'>"+td%(tuple(item))+"</tr>")
else:
table += ("<tr class='impair'>"+td%(tuple(item))+"</tr>")
i += 1
return table + "</table>"
def randgradient():
img = Image.new("RGB", (300,300), "#FFFFFF")
draw = ImageDraw.Draw(img)
r,g,b = rint(0,255), rint(0,255), rint(0,255)
dr = (rint(0,255) - r)/300.
dg = (rint(0,255) - g)/300.
db = (rint(0,255) - b)/300.
for i in range(300):
r,g,b = r+dr, g+dg, b+db
draw.line((i,0,i,300), fill=(int(r),int(g),int(b)))
f = cStringIO.StringIO()
img.save(f, "PNG")
print "Content-type: image/png\n"
f.seek(0)
return f
# Procédures de service
cmdDisk = r'wmic /Node:%s path win32_logicaldisk WHERE "DriveType=3" GET DeviceID,Freespace,Size '
def infoBanque():
alert("Banque")
def setPauseMsg(started=0):
if started == 1:
WaitCursor()
setValue("tabcentreInfo","<span class='patience'>Veuillez Patienter....</span>")
else:
Pointer()
majTabInfo()
win32gui.PumpWaitingMessages()
def infoSysteme():
setPauseMsg(1)
for i in range(10000):
i = i
titre = ["a","b"]
data = [[1,2],[2,4]]
content = formatTable(titre, data)
setValue("tabcentre",content)
setPauseMsg(0)
def infoDisque():
#cmd: cmdDisk
setPauseMsg(1)
setValue("tabcentre","")
titrecols = ['Nom','Espace Libre','Espace Total','Pourcentage']
c = os.popen(cmdDisk%Serveur).readlines()[1:-1]
items = [item.strip().split() for item in c]
for item in items:
percent = (1 - 1.0*long(item[1])/long(item[2]))*100
item.append("%.2f"%percent+"%")
item[1] = number_format(long(item[1]), 0)
item[2] = number_format(long(item[2]), 0)
# setValue("tabcentre",`items`)
content = formatTable(titrecols,items)
setValue("tabcentre",content)
setPauseMsg(0)
i = 0
def counter():
global i
i += 1
setValue("tabcentre",i)
intcounter = 0
def infoStream():
global intcounter
intcounter = window.setInterval('counter()',500)
#Fin des procédures de service
cmd['systeme'] = infoSysteme
cmd['banque'] = infoBanque
cmd['disque'] = infoDisque
cmd['stream'] = infoStream
def Initialisation():
pass
def majService():
menu = "<ul>"
for item in LstService:
menu += "<li id=%s onmouseover='Pointer()',\
onmouseout='DefaultCursor()',\
onClick='getMenuOption(%s)'>%s</li>"%(item[0],\
LstService.index(item),item[1])
menu += "</ul>"
setValue('svc',menu)
def clearZoneInfo():
elt = getElt('info')
elt.innerHTML = "Informations"
def clearCentre():
elt = getElt('tabcentre')
elt.innerHTML = ""
def connectServer(serveur):
os.system("mstsc -v %s"%serveur)
def getMenuOption(args):
window.clearInterval(intcounter)
global selectedService
service = services[IdServeur][args][0]
libelle = services[IdServeur][args][1]
selectedService = service
elt = getElt('info')
elt.innerHTML = libelle
try:
cmd[service]()
except:
pass
def clearInfo():
clearZoneInfo()
clearCentre()
setValue('tabcentre','')
setValue('svc','')
def selectServeur():
global Serveur, LstService, IdServeur
clearInfo()
try:
IdServeur = int(getValue('liste'))
except:
return
try:
Serveur = serveurs[IdServeur][0]
LstService = services[IdServeur]
majService()
majTabInfo()
except:
return
DefaultCursor()
</script>
</body>
</html>
Thursday, November 1, 2007
Python : Command Line Options
from optparse import *
from optparse import OptionParser
import sys
def mycall(option, opt, value, parser):
print "Vous n'avez pas ce privilège"
sys.exit()
def main():
utilisation = "utilisation : %prog [options] arg]"
parser = OptionParser(utilisation)
parser.add_option("-f", "--fichier", dest="fichier",help="Lit a prtie d'un fichier")
parser.add_option("-d", action="callback", callback = mycall)
parser.add_option("-m", "--mois", dest="mois",help="Moise saisie")
parser.add_option("-v", "--verbeux",action="store_true", dest="verbeux")
parser.add_option("-s", "--sauvegarde", action="store_true", dest="sauvegarde")
(options, args) = parser.parse_args()
print "Fichier : %s, Mois : %s, Sauvegarde : %s"%(options.fichier,options.mois,options.sauvegarde)
from optparse import OptionParser
import sys
def mycall(option, opt, value, parser):
print "Vous n'avez pas ce privilège"
sys.exit()
def main():
utilisation = "utilisation : %prog [options] arg]"
parser = OptionParser(utilisation)
parser.add_option("-f", "--fichier", dest="fichier",help="Lit a prtie d'un fichier")
parser.add_option("-d", action="callback", callback = mycall)
parser.add_option("-m", "--mois", dest="mois",help="Moise saisie")
parser.add_option("-v", "--verbeux",action="store_true", dest="verbeux")
parser.add_option("-s", "--sauvegarde", action="store_true", dest="sauvegarde")
(options, args) = parser.parse_args()
print "Fichier : %s, Mois : %s, Sauvegarde : %s"%(options.fichier,options.mois,options.sauvegarde)
Sunday, October 7, 2007
Boo - Asynchronous call
import System
import System.Collections
import System.Threading
import System.Net
def callback(result as IAsyncResult):
print("callback")
def run():
print "Executing"
print("started")
result = run.BeginInvoke(callback, null)
System.Threading.Thread.Sleep(50ms)
run.EndInvoke(result)
print ("done")
request = WebRequest.Create("http://www.python.org/")
result = request.GetResponse.BeginInvoke(null, null)
while not result.IsCompleted:
Console.Write("!")
Thread.Sleep(25ms)
Console.WriteLine()
// ready to get the response
response = request.GetResponse.EndInvoke(result)
Console.WriteLine("${response.ContentLength} bytes.")
print "Press any key to continue . . . "
Console.ReadKey(true)
import System.Collections
import System.Threading
import System.Net
def callback(result as IAsyncResult):
print("callback")
def run():
print "Executing"
print("started")
result = run.BeginInvoke(callback, null)
System.Threading.Thread.Sleep(50ms)
run.EndInvoke(result)
print ("done")
request = WebRequest.Create("http://www.python.org/")
result = request.GetResponse.BeginInvoke(null, null)
while not result.IsCompleted:
Console.Write("!")
Thread.Sleep(25ms)
Console.WriteLine()
// ready to get the response
response = request.GetResponse.EndInvoke(result)
Console.WriteLine("${response.ContentLength} bytes.")
print "Press any key to continue . . . "
Console.ReadKey(true)
Boo and WMI
namespace wmi
import System
import System.Management
import System.Collections
query = """SELECT * FROM Win32_LogicalDisk
where drivetype=3"""
searcher = ManagementObjectSearcher("root\\CIMV2",query)
results = searcher.Get()
for b as ManagementObject in results:
print b.Properties["DeviceID"].Value,b.Properties["Size"].Value
print "Press any key to continue . . . "
Console.ReadKey(true)
import System
import System.Management
import System.Collections
query = """SELECT * FROM Win32_LogicalDisk
where drivetype=3"""
searcher = ManagementObjectSearcher("root\\CIMV2",query)
results = searcher.Get()
for b as ManagementObject in results:
print b.Properties["DeviceID"].Value,b.Properties["Size"].Value
print "Press any key to continue . . . "
Console.ReadKey(true)
Thursday, September 13, 2007
wmic : un secret bien gardé
Cela fait maintenant un petit moment que travaille sous Windows, et je viens à peine
de découvrir cet outil surpuissant.Je vous engage à vous y intéresser.
Voici par exemple comment ouvrir une console 'cmd' sur un hôte distant
C:\Documents and Settings\artyprog>wmic /node:192.168.12.1 process call create 'cmd.exe'
Je vous laisse découvrir le reste :-)
de découvrir cet outil surpuissant.Je vous engage à vous y intéresser.
Voici par exemple comment ouvrir une console 'cmd' sur un hôte distant
C:\Documents and Settings\artyprog>wmic /node:192.168.12.1 process call create 'cmd.exe'
Je vous laisse découvrir le reste :-)
Saturday, July 28, 2007
Python - HTA : Capturer la position de la Souris
Cet exemple montre comment capturer la position de la souris en Python
Article de référence :
http://msdn2.microsoft.com/en-us/library/ms531073.aspx
Article de référence :
http://msdn2.microsoft.com/en-us/library/ms531073.aspx
<HTML>
<HEAD><TITLE>Report mouse moves in Python</TITLE>
<BODY onmousemove="reportMove()">
<H1>Python catch the Mouse</H1>
<div id="pos"></div>
<SCRIPT LANGUAGE="Python">
d = document.all
def reportMove():
x = window.event.x
y = window.event.y
d.pos.innerHTML = "posx = %d, posy =%d"%(x, y)
</SCRIPT>
</BODY>
</HTML>
Subscribe to:
Posts (Atom)