【发布时间】:2018-09-18 19:52:11
【问题描述】:
我正在开发一个 LibreOffice 扩展,其中“选项”对话框必须包含以编程方式创建的复选框列表,因为它们取决于用户安装的额外数据文件(spelling/grammar checker 的自定义设置)。
在宏组织器dialog editor 中手动添加一些复选框很容易,我可以导出到.xdl 文件并从 Python 加载,但我还没有找到任何可以添加复选框的“容器”以便我可以自动定位和滚动。
我可以使用
以编程方式将条目添加到我在 dialog.xdl 中创建的 ListBoxboxC = 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,它会将它们全部添加到同一个位置,我还没有弄清楚如何将它们相互添加。
我看到有使用 SvxCheckListBox 的 C++ 代码,例如optcomp.cxx,但这似乎是一个较新的开发,至少我在旧的 Java AWT docs 中找不到任何提及它的东西。
TL;DR:有没有一种简单的方法可以以编程方式制作从 Python 扩展到 LibreOffice 的复选框列表?
【问题讨论】:
标签: python user-interface awt libreoffice uno