如何调整wxpython中的工具提示?
我想给一个被截断的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()