我希望能够向我的LibreOffice Calc文档添加工具提示功能。
我有一个通过数据->有效性完成的下拉列表。要么具有单元格范围,要么具有列表。
如何尽可能简单地在该下拉列表的每个选项上方插入工具提示文本?
我以前没有写过宏(工具->宏),我对Visual Basic,Pyhton或Java不熟悉。 我可以寻求帮助的任何安装,插件和/或代码段吗?
例如:
1 (tooltip: this is option one)
2 (tooltip: this is option two)
3 (tooltip: option 3 this is)
我有Ubuntu 18.04。
答案 0 :(得分:0)
可以轻松完成的一件事是使用插入->注释向每个单元格添加注释。
然后,例如,选择下图所示的单元格A5,然后转到数据->有效性。将像元范围源设置为A1到A3。
或者,使用标签控件的工具提示示例位于https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=57791。
通过编写事件侦听器,可能会找到更接近您在问题中所描述内容的解决方案。 XListBox有一个名为itemStateChanged的事件。发生此事件时,也许不显示工具提示,而是在文本框中显示信息。
编辑:
以下是显示我的想法的示例代码。使用APSO运行showdlg()
。
import uno
import unohelper
from com.sun.star.awt import XItemListener
Items = [
("Item 1", "This is the first item"),
("Item 2", "This is the second item"),
("Item 3", "This is the third item"),
]
def showdlg():
doc = XSCRIPTCONTEXT.getDocument()
dlg = TooltipDialog(doc)
dlg.show()
class TooltipDialog(XItemListener, unohelper.Base):
def __init__(self, doc):
self.parent = doc.CurrentController.Frame.ContainerWindow
self.dlg = None
self.label = None
def show(self):
toolkit = self.parent.getToolkit()
ctx = uno.getComponentContext()
smgr = ctx.ServiceManager
model = smgr.createInstanceWithContext(
"com.sun.star.awt.UnoControlDialogModel", ctx)
dialog = smgr.createInstanceWithContext(
"com.sun.star.awt.UnoControlDialog", ctx)
model.setPropertyValue("PositionX", 100)
model.setPropertyValue("PositionY", 100)
model.setPropertyValue("Width", 200)
model.setPropertyValue("Height", 75)
model.setPropertyValue("Title", "Tooltip Listbox")
listbox = model.createInstance(
"com.sun.star.awt.UnoControlListBoxModel")
listbox.setPropertyValue("PositionX", 20)
listbox.setPropertyValue("PositionY", 10)
listbox.setPropertyValue("Width", 40)
listbox.setPropertyValue("Height", 20)
listbox.setPropertyValue("Dropdown", True)
listbox.setPropertyValue("Name", "ListBox1")
for pos in range(len(Items)):
listbox.insertItemText(pos, Items[pos][0])
model.insertByName("ListBox1", listbox)
label = model.createInstance(
"com.sun.star.awt.UnoControlFixedTextModel")
label.setPropertyValue("PositionX", 70)
label.setPropertyValue("PositionY", 10)
label.setPropertyValue("Width", 100)
label.setPropertyValue("Height", 20)
label.setPropertyValue("Name", "Label1")
label.setPropertyValue("Label", "(Please select an item.)")
model.insertByName("Label1", label)
dialog.setModel(model)
control = dialog.getControl("ListBox1")
control.addItemListener(self)
self.label = dialog.getControl("Label1")
dialog.createPeer(toolkit, None)
self.dlg = dialog
self.dlg.execute()
self.dlg.dispose()
def itemStateChanged(self, itemEvent):
"""XItemListener event handler."""
pos = itemEvent.Source.SelectedItemPos
description = Items[pos][1]
self.label.setText(description)
您可能会注意到,该示例不包含任何特殊格式。例如,更改它以将标签修改为黄色的3-D框应该很简单。同样,该示例可适用于显示使用threads短时间后消失的消息。它仍然不是真正的工具提示,但是如果对您很重要,则可以使它看起来和工作起来很像。
可以使用电子表格lookup函数来实现类似的解决方案,而无需任何宏。文本将显示在单元格中,而不是单独的对话框中,并且将基于数据有效性结果来计算单元格值。那样会给外观带来很大的灵活性,但它应该能够毫无问题地显示说明。