【问题标题】:How to remove a tooltip in wxpython?如何删除 wxpython 中的工具提示?
【发布时间】:2015-11-27 11:06:35
【问题描述】:

如何在 wxpython 中删除工具提示?我知道它们有一个过期时间,之后它们就会消失,但我很难在文档中找到任何关于故意删除它们的内容。

在我的特殊情况下,我有一个 wx.grid,它在 wx.EVT_MOTION 上调用一个函数,它获取网格中事件的坐标,找出它是哪个单元格(a la grid.CalcUnscrolledPosition() 和 grid .XYToCell()),然后,如果它是一个特定的单元格,则创建一个工具提示。现在,如果已经有工具提示,如果光标悬停在不需要工具提示的单元格上方,我想将其删除。我正在努力在文档中找到任何内容。 This link 具有 ToolTip.Enable() 函数,但没有任何结果。文档似乎暗示它应该全局启用/禁用工具提示,但没有任何反应。

有什么想法吗?

仅供参考,Win7,Python 2.7.9,wx 3.0.2.0

编辑 相关代码的大致结构:

self.grid.GetGridWindow().Bind(wx.EVT_MOTION, self.onMouseOver)

...

def onMouseOver(self, event):
    #get current grid cell
    x, y = self.grid.CalcUnscrolledPosition(event.GetX(), event.GetY())
    coords = self.grid.XYToCell(x,y)
    row = coords[0]
    col = coords[1]

    if col in relevanCols:
        event.GetEventObject().SetToolTipString("Hai")
    else:
        self.grid.SetToolTip(None)

    event.Skip()

【问题讨论】:

    标签: python-2.7 wxpython wxwidgets


    【解决方案1】:

    最后,在折磨了这该死的东西一个时代之后,结果和头脑也简单得令人难以置信SetToolTip(None)
    见下文:

    import wx
    class MyForm(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, wx.ID_ANY, "Toggle")
            self.panel = wx.Panel(self, wx.ID_ANY)
            self.dummy = wx.StaticText(self.panel, -1, "")
            self.cb1 = wx.CheckBox(self.panel, -1,"Choice 1", pos=(10,10))
            self.cb2 = wx.CheckBox(self.panel, -1,"Choice 2", pos=(10,40))
            self.cb1.Bind(wx.EVT_CHECKBOX, self.onToggle1)
            self.cb2.Bind(wx.EVT_CHECKBOX, self.onToggle2)
            self.cb1.SetToolTipString(wx.EmptyString)
            self.cb2.SetToolTipString(wx.EmptyString)
        #----------------------------------------------------------------------
        def onToggle1(self, event):
            if self.cb1.GetValue() == True:
                self.cb1.SetToolTipString("Check Box 1 is Checked")
            else:
                self.cb1.SetToolTip(None)
    
        def onToggle2(self, event):
            if self.cb2.GetValue() == True:
                self.cb2.SetToolTipString("Check Box 2 Is Checked")
            else:
                self.cb2.SetToolTip(None)
    
    # Run the program
    if __name__ == "__main__":
        app = wx.App(False)
        frame = MyForm()
        frame.Show()
        app.MainLoop()
    

    编辑: 对于您问题中与在网格中使用相关的代码,请更改

    if col in relevanCols:
        event.GetEventObject().SetToolTipString("Hai")
    else:
        self.grid.SetToolTip(None)
    

    到:

    if col in relevanCols:
        event.GetEventObject().SetToolTipString("Hai")
    else:
        event.GetEventObject().SetToolTip(None)
    

    【讨论】:

    • 不幸的是 SetToolTip(None) 对我不起作用。我的工具提示在 wx.grid 中,而不是在复选框中,因此只有当光标离开网格时它才会消失。当我移动到另一个单元格(不应该生成新工具提示的单元格)时,当前的工具提示会一直保留到到期。我在我的问题中添加了我的代码的精简版本。
    • 我现在没有时间模拟它,但你试过event.GetEventObject().SetToolTip(None)而不是self.grid.SetToolTip(None)
    • Arghh,这是我没有尝试过的一种组合,它奏效了!谢谢。将其添加到您的答案中,我会接受。谢谢,伙计。
    • @kbau Arghh 确实如此。它发生在我们所有人身上。我们浪费的时间,然后是明显的流血。你的问题让我回到这个问题并为自己解决,所以谢谢你的问题。答案已编辑。
    猜你喜欢
    • 1970-01-01
    • 2016-09-13
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多