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

时间:2011-06-20 17:31:57

标签: python wxpython tooltip

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

enter image description here

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

enter image description here enter image description here

虽然I'm aware of this wiki article可能会为截断的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)

2 个答案:

答案 0 :(得分:4)

我不确定我们是否有办法创建原生Win7工具提示,正如您所见,wx.TipWindow看起来像是旧版本Windows的工具提示,所以我们应该有一些较新的API使用而不是。请在trac.wxwidgets.org创建一张票,以确定或要求更改,如果不可能的其他方式,我目前没有想到。

答案 1 :(得分:1)

即使您无法从头开始创建和弹出本机工具提示,您仍然可以在创建时为整个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()