如何使用wxPython创建信息图标

时间:2017-08-17 21:15:18

标签: python wxpython wxwidgets

到目前为止,我无法使用wxPython创建俗称“​​信息图标”的内容。带有某种“i”图像的图标,显示悬停时的大工具提示。

我可以为图片添加wx.StaticBitmap但忽略所有SetToolTipStringSetToolTip(wx.ToolTip())次来电。或者我可以向wx.StaticText添加一个大工具提示,如下所示。

enter image description here 忽略图标的大小不正确。

毋庸置疑,工具提示最终需要的背景颜色与面板背景颜色不同(此处不是焦点)。我不能使用wx.adv.RichToolTip,因为我正在使用wxPython 3.0.2.0 osx-cocoa。

解决这个问题的好方法是什么?

3 个答案:

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

enter image description here

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

当我运行此代码时,我会得到类似的结果:

request-promise