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

7 投票
2 回答
3959 浏览
提问于 2025-04-16 19:55

我想给一个被截断的ObjectListView添加一个提示框,来显示完整内容,结果发现它其实自带这个功能:

这里输入图片描述

我尝试用wx.TipWindow、wx.PopupWindow和SuperToolTip自己做提示框,但都没有这个看起来那么“原生”。

这里输入图片描述 这里输入图片描述

虽然我知道有一篇维基文章,说是可以为被截断的wx.ListCtrl启用提示框,但我其实不太明白怎么让它工作。我还希望它不仅在内容被截断时才显示,而是能用来展示更多信息。

我觉得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的提示框,所以可能有一些更新的接口我们应该使用。请在trac.wxwidgets.org上提交一个请求,看看是否能确认这个问题,或者如果没有其他办法的话,请求进行更改。

1

即使你不能从头开始创建和弹出一个原生的提示框,你仍然可以在创建整个列表控件时给它设置一个提示框,然后根据鼠标指针下的项目来改变提示框的文本。虽然这个提示框不会像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()

撰写回答