如何在wxpython中关闭工具提示

如何在wxpython中关闭工具提示,wxpython,Wxpython,我试过: wx.ToolTip.Enable(False) wx.ToolTip_Enable(False) 及 这些说明都没有被拒绝,但都不起作用 我使用的是LinuxMint17wx.python2.8.12.1(GTK2Unicode)python2.7根据wxpython的工具提示,启用 全局启用或禁用工具提示 注:并非所有平台(如Cocoa)都支持此功能 我想包括你的平台。。。 相反,您可能需要为窗口本身设置工具提示。对于窗口,我看不到ToolTop\u Enable

我试过:

wx.ToolTip.Enable(False)    
wx.ToolTip_Enable(False)    

这些说明都没有被拒绝,但都不起作用
我使用的是
LinuxMint17
wx.python2.8.12.1(GTK2Unicode)
python2.7
根据wxpython的工具提示,
启用

全局启用或禁用工具提示

注:并非所有平台(如Cocoa)都支持此功能

我想包括你的平台。。。 相反,您可能需要为窗口本身设置工具提示。对于窗口,我看不到
ToolTop\u Enable
方法,但将工具提示设置为空字符串似乎可以帮我解决问题

import wx

app = wx.App()

frame = wx.Frame(None, -1, '')
frame.SetToolTip(wx.ToolTip(''))
frame.SetSize(wx.Size(300,250))
frame.Show()

app.MainLoop()
编辑:定义可启用/禁用的子工具提示类以及基于全局值的默认值

import wx

EnableTooltips = False

class Tooltip(wx.ToolTip):

    '''A subclass of wx.ToolTip which can be disabled'''

    def __init__(self, string, Enable=EnableTooltips):
        self.tooltip_string = string
        self.TooltipsEnabled = Enable
        wx.ToolTip.__init__(self, string)
        self.Enable(Enable)

    def Enable(self, x):

        if x is True:
            self.SetTip(self.tooltip_string)
            self.TooltipsEnabled = True
        elif x is False:
            self.SetTip("")
            self.TooltipsEnabled = False         

app = wx.App()

frame = wx.Frame(None, -1, '')
tt = Tooltip('test')
frame.SetToolTip(tt)
frame.SetSize(wx.Size(300,250))

frame.Show()
app.MainLoop()

我不确定这是否会动态工作(即,一旦启动gui,框架工具提示已设置,更改其值可能不会更新)。

最后,单个工具提示的答案非常简单,但需要一段时间才能找到。
使用
SetToolTipString(“我的工具提示”)
设置工具提示,但使用
SetToolTip(无)
将其删除,请参见下文:
工具提示的全局打开和关闭似乎仍由桌面环境控制

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

感谢您回复Ed,但如果您已经定义了工具提示,只想能够将其关闭。遗憾的是,你的解决方案不起作用。我想我必须接受这样一个事实:在我目前的环境中,我无法关闭它们。我通过设置wx.ToolTip.SetDelay(25000)进行横向思考的努力也没有起作用,可能是因为与最初版本相同的原因。因此,作为最后手段,您可以编辑$HOME/.gtkrc-2.0文件并添加gtk enable tooltips=0,这将全局关闭工具提示,或者使用稍微不太苛刻的gtk tooltip timeout=5000,这将全局设置工具提示,使其仅在您悬停5秒时显示。遗憾的是,手册中说,从Gtk 3.1开始,这两个版本都已被弃用,似乎没有提供替代方案。为什么我们不能选择打开和关闭工具提示?这似乎有点疏忽。本着横向思维的精神,如何定义一个可以启用并在代码中使用全局标志的子类?我在上面编辑了一个可能的解决方案。嗨,Ed,谢谢你。如果事实是这样的话,那就是我最终所做的。我使用了全局定义On、Partial和Off,并使用它来决定启动时将定义哪些工具提示。供您参考,我会定期动态更改工具提示,这是一种享受。你好,罗尔夫。嗨,罗尔夫,很高兴你让它工作了。如果您的解决方案明显不同,最好将其作为一个单独的答案,这样它可以在将来帮助人们提出类似的问题(或者编辑上面的内容,如果不重要,请接受)。
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()