如何在wxpython中调整我的工具提示?


问题内容

我试图添加一个工具提示来显示被截断的ObjectListView的全部内容,直到事实证明它具有这样的内置功能:

在此处输入图片说明

我尝试使用wx.TipWindow,wx.PopupWindow和SuperToolTip制作自己的工具提示,但没有一个比这看起来更像“本机”。

在此处输入图片说明
在此处输入图片说明

虽然我知道此Wiki文章应该启用了截断的wx.Listrctrls的工具提示,但我并不真正了解如何使它工作。我还希望它仅在某些内容被截断时才起作用,而我希望能够使用它来显示更多信息。

我猜SuperToolTip接近了,但是当您删除“ header”时,它的顶部留有空白,而不是使文本居中于工具提示的中间并使之合适。

我尝试查看ObjectListView,SuperToolTip和wxpython的源代码以尝试查找如何创建工具提示,但是我找不到真正实现它的底层部件。

那么,如何调整工具提示,使它们看起来更像本机工具提示?

生成当前弹出窗口的代码是:

text = "I'm a popup"

class PopUp(wx.TipWindow):
    def __init__(self, parent, text):
        wx.TipWindow.__init__(self, parent, text)

class PopUp2(wx.PopupWindow):
    def __init__(self, parent, text):
        wx.PopupWindow.__init__(self, parent)
        st = wx.StaticText(self, parent, text)

# Import `from agw import supertooltip as STT`
popup3 = STT.SuperToolTip(text)

问题答案:

即使您不能从头开始创建并弹出本机工具提示,也可以在创建整个ListCtrl时为其分配工具提示,然后根据鼠标指针下的项目将文本更改为所需的内容。它不能像ObjectListView那样将工具提示整齐地放置在列表项上,但是我认为它仍然可以完成您所要的内容。

    self.lc = wx.ListCtrl(self, style=wx.LC_REPORT)
    # ...
    self.lc.Bind(wx.EVT_MOTION, self.OnMouseMotion)

def OnMouseMotion(self, evt):
    pos = self.lc.ScreenToClient(wx.GetMousePosition())
    item_index, flag = self.lc.HitTest(pos)
    tip = self.lc.GetToolTip()

    if flag == wx.LIST_HITTEST_ONITEMLABEL:
        tip.SetTip('Some information about ' + self.lc.GetItemText(item_index))
    else:
        tip.SetTip('')

    evt.Skip()