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

7

我曾试图添加工具提示,以显示截断的ObjectListView的完整内容,但后来发现它已经内置了这个功能:

enter image description here

我尝试使用wx.TipWindow、wx.PopupWindow和SuperToolTip创建自己的工具提示,但没有一个看起来像这个那么“本地”。

enter image description here enter image description here

虽然我知道这篇维基百科文章可以为截断的wx.Listrctrls启用工具提示,但我并没有真正理解如何使其工作。我还期望它只在某些内容被截断时才能工作,而我想要能够使用它来显示更多信息。

我猜SuperToolTip接近了我的需求,但是当你删除“标题”后,它会在顶部留下空白,而不是将文本居中放置在工具提示的中间并使其适应。

我尝试查看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个回答

4

我不确定我们是否有一种方法来创建本地的Win7工具提示,正如您所看到的,wx.TipWindow看起来像是来自旧版本Windows的工具提示,因此可能有一些更新的API应该使用。请在trac.wxwidgets.org上创建一个票据以确保或请求更改,如果我此时没有想到其他方式。


已经提交了一个票据(http://trac.wxwidgets.org/ticket/13289),希望我做得没错。 - Ivo Flipse

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()

如果我可以把系统按钮的背景颜色改变,我想就差不多了。 - Ivo Flipse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接