j'ai commencé Libre-Office Calc avec la commande suivante:Python 3 retourne classe null lorsque vous utilisez contructor
$ libreoffice --calc --accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"
import uno
# Class so I don't have to do this crap over and over again...
class UnoStruct():
localContext = None
resolver = None
ctx = None
smgr = None
desktop = None
model = None
def __init__(self):
print("BEGIN: constructor")
# get the uno component context from the PyUNO runtime
localContext = uno.getComponentContext()
# create the UnoUrlResolver
resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext)
# connect to the running office
ctx = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
smgr = ctx.ServiceManager
# get the central desktop object
desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop",ctx)
# access the current writer document
model = desktop.getCurrentComponent()
print("END: constructor")
Et puis je l'appelle avec:
myUno = UnoStruct()
BEGIN: constructor
END: constructor
et tenter de l'obtenir avec
active_sheet = myUno.model.CurrentController.ActiveSheet
AttributeError: 'NoneType' object has no attribute 'CurrentController'
et il apparaît que le model
est None
(null)
>>> active_sheet = myUno.model
>>> print(myUno.model)
None
>>> print(myUno)
<__main__.UnoStruct object at 0x7faea8e06748>
Alors, que s'est-il passé dans le constructeur? Ne devrait-il pas encore être là? J'essaie d'éviter le code de la plaque de la chaudière.
P.S. Je suis conscient que ce n'est pas vraiment une structure, je l'ai juste appelé ça. – leeand00
Vous ne définissez jamais 'myUno.model', donc c'est toujours' None' de la définition de la classe. – kindall
La classe 'UnoObjs' de [ce code github] (https://github.com/silnrsi/libreoffice-linguistic-tools/blob/master/LinguisticTools/pythonpath/lingt/utils/util.py) le fait. –