如何在 wxpython 中关闭工具提示

How to turn off tooltips in wxpython

我试过:

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

wx.ToolTip.Enable(flag=False)    

none 条指令被拒绝,但 none 条指令有效
我正在使用 Linux Mint 17 wx.python 2.8.12.1 (gtk2-unicode) python 2.7

根据wxpythondocs,ToolTip.Enable好像,

Enable or disable tooltips globally.

Note May not be supported on all platforms (eg. Cocoa).

我假设其中包括您的平台... 相反,您可能需要为 window 本身设置工具提示。对于 window,我看不到 ToolTop_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()

编辑:定义一个子工具提示 class,它可以是 enabled/disabled,默认值基于全局值。

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("my Tool Tip") 设置工具提示,但使用 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()