Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何删除wxpython中的工具提示?_Python 2.7_Wxpython_Wxwidgets - Fatal编程技术网

Python 2.7 如何删除wxpython中的工具提示?

Python 2.7 如何删除wxpython中的工具提示?,python-2.7,wxpython,wxwidgets,Python 2.7,Wxpython,Wxwidgets,如何删除wxpython中的工具提示?我知道它们有一个失效期,在失效期过后它们就会消失,但我很难在文档中找到任何关于故意移除它们的信息 在我的特殊情况下,我有一个wx.grid,它在wx.EVT_运动中调用一个函数,该函数获取网格中事件的坐标,找出它是哪个单元格(la grid.calcunscrolled position()和grid.XYToCell()),然后,如果它是一个特定的单元格,则创建一个工具提示。现在,在已经有工具提示的情况下,如果光标悬停在不需要工具提示的单元格上方,我想删除

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

在我的特殊情况下,我有一个wx.grid,它在wx.EVT_运动中调用一个函数,该函数获取网格中事件的坐标,找出它是哪个单元格(la grid.calcunscrolled position()和grid.XYToCell()),然后,如果它是一个特定的单元格,则创建一个工具提示。现在,在已经有工具提示的情况下,如果光标悬停在不需要工具提示的单元格上方,我想删除它。我很难在文档中找到任何东西。具有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()

最后,在把这该死的东西拖了一段时间后,结果和想法都非常简单
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)
致:


不幸的是,SetToolTip(无)对我不起作用。我的工具提示位于wx.grid中,而不是复选框中,因此它只有在光标离开网格时才会消失。当我移动到另一个单元格(不应生成新工具提示的单元格)时,当前工具提示将一直保留到到期。我已经在我的问题中添加了一个精简版的代码。我现在没有时间模拟它,但是您是否尝试过
event.GetEventObject().SetToolTip(None)
而不是
self.grid.SetToolTip(None)
Arghh,这是我没有尝试过的一个组合,它起作用了!谢谢把它加到你的答案里,我会接受的。谢谢,伙计。@kbau-Arghh真的。这发生在我们所有人身上。我们浪费的时间,然后是明显的流血。你的问题让我回到这里,自己解决,所以谢谢你的提问。答案已编辑。
if col in relevanCols:
    event.GetEventObject().SetToolTipString("Hai")
else:
    event.GetEventObject().SetToolTip(None)