到目前为止,我无法使用wxPython创建俗称“信息图标”的内容。带有某种“i”图像的图标,显示悬停时的大工具提示。
我可以为图片添加wx.StaticBitmap
但忽略所有SetToolTipString
或SetToolTip(wx.ToolTip())
次来电。或者我可以向wx.StaticText
添加一个大工具提示,如下所示。
毋庸置疑,工具提示最终需要的背景颜色与面板背景颜色不同(此处不是焦点)。我不能使用wx.adv.RichToolTip
,因为我正在使用wxPython 3.0.2.0 osx-cocoa。
解决这个问题的好方法是什么?
答案 0 :(得分:2)
如果您创建ID为wx.ID_HELP
的按钮,那么您将获得该平台的库存帮助按钮(如果有)。然后你可以像任何按钮一样随心所欲地做任何事情。分配工具提示,在EVT_BUTTON
事件中执行某些操作等。请参阅StockButtons sample in the demo。如果库存图片或标签不能满足您的需求,那么您可以使用wx.BitmapButton来显示所需的图像,并且仍然具有标准的工具提示支持。
您可能想要查看的其他内容是ContextHelp sample in the demo。它显示了如何使用wx.ContextHelpButton
,在单击时,将应用程序置于上下文帮助模式。然后将显示弹出提示窗口,以显示下一个单击的小部件。不是你要求的,但它可能是一个很好的选择。
答案 1 :(得分:2)
wxArtProvider可以帮助http://docs.wxwidgets.org/trunk/classwx_art_provider.html
import wx
class Test(wx.Frame):
def __init__(self,parent,msg,title):
wx.Frame.__init__(self, None)
self.panel = wx.Panel(self, size=(300,400))
mainSizer = wx.BoxSizer(wx.HORIZONTAL)
staticIcon = wx.BitmapButton(self.panel, bitmap=wx.ArtProvider.GetBitmap(wx.ART_WARNING), size=(32,32))
mainSizer.Add(staticIcon, flag=wx.ALL, border=10)
ttip = "xxxxxxxxxxxxxxx\n"
ttip += "xxxxxxxxxxxxxxxxxxxxxxxxxx\n"
ttip += "xxxxxxxxxxxxxxxxxxxxxxxxxxx\n"
ttip += "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
staticIcon.SetToolTipString(ttip)
buttonText = wx.StaticText(self.panel, -1, msg, wx.DefaultPosition, wx.DefaultSize, 0)
mainSizer.Add(buttonText, flag=wx.ALL, border=10)
staticIcon.Bind(wx.EVT_BUTTON, self.OnButton)
self.SetSizer(mainSizer)
self.Show()
def OnButton(self, evt):
print "The button was pressed - display some help"
if __name__ == '__main__':
app = wx.App()
Test(None, "Dummy Exercise", "Test 123")
app.MainLoop()
答案 2 :(得分:1)
如果您想要做的就是在图片被鼠标悬停时显示工具提示,那么您需要将wx.StaticBitmap
的实例绑定到EVT_MOTION
:
import wx
class MyPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
bmp = wx.ArtProvider.GetBitmap(wx.ART_WARNING)
self.image = wx.StaticBitmap(self, bitmap=bmp)
self.image.Bind(wx.EVT_MOTION, self.on_mouse_over)
def on_mouse_over(self, event):
self.image.SetToolTipString('BLAH BLAH BLAH')
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='Icon Mouser')
panel = MyPanel(self)
self.Show()
if __name__ == '__main__':
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
当我运行此代码时,我会得到类似的结果: