首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyuno索引问题,我想要一个解释

Pyuno索引问题,我想要一个解释
EN

Stack Overflow用户
提问于 2015-09-05 17:52:44
回答 1查看 170关注 0票数 0

下面的python libreoffice Uno宏只能与try..except语句一起使用。

宏允许您选择writer文档中的文本,并将其发送到默认浏览器中的搜索引擎。

问题是,如果您选择了一段文本,则会填充oSelected.getByIndex(0),但如果您选择了多段文本,则不会填充oSelected.getByIndex(0)。在这种情况下,数据从oSelected.getByIndex(1)开始,oSelected.getByIndex(0)保留为空。

我不知道为什么会这样,我很想知道是否有人可以解释这种奇怪的行为。

代码语言:javascript
复制
#!/usr/bin/python    
import os
import webbrowser
from configobj import ConfigObj
from com.sun.star.awt.MessageBoxButtons import BUTTONS_OK, BUTTONS_OK_CANCEL, BUTTONS_YES_NO, BUTTONS_YES_NO_CANCEL, BUTTONS_RETRY_CANCEL, BUTTONS_ABORT_IGNORE_RETRY
from com.sun.star.awt.MessageBoxButtons import DEFAULT_BUTTON_OK, DEFAULT_BUTTON_CANCEL, DEFAULT_BUTTON_RETRY, DEFAULT_BUTTON_YES, DEFAULT_BUTTON_NO, DEFAULT_BUTTON_IGNORE

from com.sun.star.awt.MessageBoxType import MESSAGEBOX, INFOBOX, WARNINGBOX, ERRORBOX, QUERYBOX

def fs3Browser(*args):
#get the doc from the scripting context which is made available to all scripts
    desktop = XSCRIPTCONTEXT.getDesktop()
    model = desktop.getCurrentComponent()
    doc = XSCRIPTCONTEXT.getDocument()
    parentwindow = doc.CurrentController.Frame.ContainerWindow

    oSelected = model.getCurrentSelection()
    oText = ""
    try:
        for i in range(0,4,1):
            print ("Index No ", str(i))
            try:
                oSel = oSelected.getByIndex(i)
                print (str(i), oSel.getString())
                oText += oSel.getString()+" "
            except:
                break
    except AttributeError:
        mess = "Do not select text from more than one table cell"
        heading = "Processing error"
        MessageBox(parentwindow, mess, heading, INFOBOX, BUTTONS_OK)
        return

    lookup = str(oText)
    special_c =str.maketrans("","",'!|@#"$~%&/()=?+*][}{-;:,.<>')
    lookup = lookup.translate(special_c)
    lookup = lookup.strip()
    configuration_dir = os.environ["HOME"]+"/fs3"
    config_filename = configuration_dir + "/fs3.cfg"
    if  os.access(config_filename, os.R_OK):
        cfg = ConfigObj(config_filename)

    #define search engine from the configuration file
    try:
        searchengine = cfg["control"]["ENGINE"]
    except:
        searchengine = "https://duckduckgo.com"
    if 'duck' in searchengine:
        webbrowser.open_new('https://www.duckduckgo.com//?q='+lookup+'&kj=%23FFD700 &k7=%23C9C4FF &ia=meanings')
    else:
        webbrowser.open_new('https://www.google.com/search?/&q='+lookup)
    return None
def MessageBox(ParentWindow, MsgText, MsgTitle, MsgType, MsgButtons):
    ctx = XSCRIPTCONTEXT.getComponentContext()
    sm = ctx.ServiceManager
    si = sm.createInstanceWithContext("com.sun.star.awt.Toolkit", ctx) 
    mBox = si.createMessageBox(ParentWindow, MsgType, MsgButtons, MsgTitle, MsgText)
    mBox.execute()    
EN

回答 1

Stack Overflow用户

发布于 2015-09-13 00:23:15

您的代码缺少某些内容。这不需要额外的try/except子句就可以工作:

代码语言:javascript
复制
selected_strings = []
try:
    for i in range(oSelected.getCount()):
        oSel = oSelected.getByIndex(i)
        if oSel.getString():
            selected_strings.append(oSel.getString())
except AttributeError:
    # handle exception...
    return
result = " ".join(selected_strings)

要回答你关于“奇怪的行为”的问题,对我来说似乎很简单。如果第0个元素为空,则可能需要以不同的方式处理多个选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32411714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档