从Python在LibreOffice中创建checklistbox

2024-05-16 06:19:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个LibreOffice扩展,其中“选项”对话框必须有一个以编程方式创建的复选框列表,因为它们取决于用户安装的额外数据文件(a spelling/grammar checker的自定义设置)。你知道吗

在宏管理器dialog editor中手动添加一些复选框很容易,我可以将其导出到.xdl文件并从Python加载,但我还没有找到任何类型的“容器”可以添加复选框,以便自动定位和滚动。你知道吗

我可以通过编程方式将条目添加到我在对话框.xdl使用

boxC = windowC.getControl("toggleIds")
boxM = boxC.getModel()
entries = ("some", "checkbox", "entries")
uno.invoke(boxM, "setPropertyValue", ("StringItemList", uno.Any("[]string", entries)))

但是在列表框中进行多重选择需要按ctrl键,这不是很直观。你知道吗

我可以通过编程方式将单个复选框添加到对话框窗口(扩展的选项选项卡的“主要部分”)

windowM = windowC.getModel()
ctx = uno.getComponentContext()
cb1 = ctx.ServiceManager.createInstanceWithContext("com.sun.star.form.component.CheckBox", ctx)
cb1.Label = "some label"
cb1.State = 1;
windowM.insertByName("mycb1", cb1)

这就把它放在了最上面,但是看起来我必须手动执行所有的滚动代码、定位等操作。如果我在这里执行insertByName多次,它会将它们全部添加到同一位置,我还不知道如何将它们添加到另一个下面。你知道吗

<>我看到有一个C++代码,使用SvxCheckListBox,例如optcomp.cxx,但是这看起来是一个新的发展,至少在旧的java AWT docs中找不到任何涉及它的东西。你知道吗


TL;DR:有没有一种简单的方法以编程方式列出从Python扩展到LibreOffice的复选框列表?你知道吗


Tags: 定位列表libreoffice选项编程方式手动复选框
1条回答
网友
1楼 · 发布于 2024-05-16 06:19:14

SvxCheckListBox由LibreOffice用于对话框,例如工具->;选项->;LibreOffice->;字体中的替换表。但是,它没有被API公开,因此您不能使用它。你知道吗

为了证明这一点,下面是API公开的所有接口和服务,其中包含来自offapi/type_reference/offapi.idl的单词“Box”。你知道吗

com::sun::star::awt::UnoControlCheckBox
com::sun::star::awt::UnoControlCheckBoxModel
com::sun::star::awt::UnoControlComboBox
com::sun::star::awt::UnoControlComboBoxModel
com::sun::star::awt::UnoControlGroupBox
com::sun::star::awt::UnoControlGroupBoxModel
com::sun::star::awt::UnoControlListBox
com::sun::star::awt::UnoControlListBoxModel
com::sun::star::awt::XCheckBox
com::sun::star::awt::XComboBox
com::sun::star::awt::XMessageBox
com::sun::star::awt::XMessageBoxFactory
com::sun::star::form::component::CheckBox
com::sun::star::form::component::ComboBox
com::sun::star::form::component::ListBox

所以唯一的办法就是。。。你知道吗

manually do all the scrolling-code, positioning etc.

我的建议是创建一个名为“CheckListBox”的新的通用Python类来处理滚动和定位,然后派生或实例化它以生成选项的特定复选框。你知道吗

相关问题 更多 >