Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# PyXpcom, menulist, et propriétés

Envoyé par : Vinnie

Date : 19/01/2009 17:18

Bonjour à tous, J'essaie d'utiliser python pour manipuler le dom, et j'ai quelques problèmes, lorsque j'accède à un menulist je n'ai presque pas de propriétés accessibles. Je ne peux nottament pas accéder à selectedItem.

J'ai fait un petit exemple pour illustrer en 2 fichiers

xprpytest.xul

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window xmlns:html="http://www.w3.org/1999/xhtml"
       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
       id="wndMain"
       title="XULRunner with Python"
       orient="vertical"
       screenX="100" screenY="100"
       height="350" width="500"
       script-type="application/x-python"
       >
   <script type="application/javascript">
   	function testJavascript() {
		var mList =  document.getElementById('ListeMenu')
   		document.getElementById('debug').value += "Valeur selectionnee : "+mList.getItemAtIndex(mList.selectedIndex).value+"\n"
	}
   </script>
   <script type="application/x-python" src="xrpytest.py"/>
   <menulist label="Mon menu" id="ListeMenu">
   	<menupopup id="Menu1">
   		<menuitem label="valeur1" value="Valeur 1"/>
   		<menuitem label="valeur2" value="Valeur 2"/>
   		<menuitem label="valeur3" value="Valeur 3"/>
   	</menupopup>
   </menulist>
   <textbox cols="30" rows="30" id="debug"></textbox>
   <button script-type="application/javascript"  oncommand="testJavascript()" label="Test Javascript"/>
    <button oncommand="testPython()" label="Test Python"/>
</window>

et xprpytest.py

import nsdom
def testPython():
    mList = document.getElementById('ListeMenu')
    document.getElementById('debug').value += "Valeur selectionnee : +mList.getItemAtIndex(mList.selectedIndex).value+"\n"

Le tout disponible dans cette archive : http://dl.free.fr/oQ3534ynN

Lorsque j'appuie sur le bouton test python j'ai un message d'erreur m'indiquant que la propriété getItemAtIndex n'existe pas

WARNING:xpcom:Python DOM script error
Traceback (most recent call last):
 File "C:\pyxulrunner\pyxpcom_gui_app\xulrunner\pylib\nsdom\context.py", line 478, in CallEventHandler
 File "chrome://prun/content/testXULPython/xrpytest.xul", line 1, in oncommand
 File "chrome://prun/content/testXULPython/xrpytest.py", line 9, in testPython
 File "C:\pyxulrunner\pyxpcom_gui_app\xulrunner\pylib\nsdom\context.py", line 144, in __getattr__
 File "C:\pyxulrunner\pyxpcom_gui_app\xulrunner\pylib\xpcom\client\__init__.py", line 384, in __getattr__
<type 'exceptions.AttributeError'>: XPCOM component '<unknown>' has no attribute 'getItemAtIndex'

Je voulais donc savoir si soit c'est un bug de xulrunner, ou s'il y a une astuce pour accéder aux propriétés avec python

# Re: PyXpcom, menulist, et propriétés

Envoyé par : Paul Rouget

Date : 20/01/2009 10:15

Je n'y connais rien à Python et Mozilla, et je ne savais pas qu'on pouvait avoir des scripts côté chrome (vs. côté XPCom) en Python. Juste le fait d'avoir compilé PyXPCom t'a permis de faire ça ? Es-tu certain de pouvoir manipuler du DOM ?

# Re: PyXpcom, menulist, et propriétés

Envoyé par : laurentj

Date : 20/01/2009 10:27

La méthode en question est une méthode dans le XBL du menulist. Elle fait partie de l'interface nsIDOMXULSelectControlElement. Donc il est probable que le binding python ne permet pas d'accéder au méthode définie par un XBL, et que dans le cas du menulist, vu que le XBL déclare explicitement qu'il implemente ladite interface, il faille faire un QueryInterface pour que le mapping sur l'objet python se fasse.

(note, je suis comme paul, j'y connais pas grand chose à python et au binding xpcom)

# Re: PyXpcom, menulist, et propriétés

Envoyé par : Vinnie

Date : 20/01/2009 15:34

Lorsque je fais un dir() sur mList, j'ai effectivement une méthode queryInterface, je ne sais pas trop comment l'utiliser ... je verrai ça demain, je ne suis pas chez moi.

Pour plus d'info sur python et xulrunner : http://pyxpcomext.mozdev.org/no_wrap/tutorials/pyxulrunner/python_xulrunner_about.html

ou sinon : http://pyxpcomext.mozdev.org/ l'extension firefox.

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.