【问题标题】:Is there a way to hide a button but make it clickable?有没有办法隐藏按钮但使其可点击?
【发布时间】:2020-02-14 10:31:42
【问题描述】:

我正在用wxpython 制作一个软件,我用一个帮助制作徽标的网站创建了一个徽标,我想在该徽标后面创建一个不可见的按钮,当点击该徽标时我会执行一些操作,所以有没有办法让按钮不可见但可点击?

This image

我想在退出文字上创建一个不可见的按钮,当点击退出时,它会退出软件,有什么办法吗?

【问题讨论】:

  • wx.BitmapButton ?
  • @RolfofSaxony 但我不想制作位图按钮,因为它会将整个图像制作为按钮,我想将图像粘贴到我的软件中,然后在图像下制作一个不可见的按钮.
  • 图片会隐藏在哪里,在哪里?左上右下?如果它是不可见的,用户怎么会知道它在那里,更不用说要点击的图像的正确部分了!也许,您需要对您的想法进行更多思考或更好地解释问题,以便有人有机会提供更符合您喜好的答案/建议。
  • @RolfofSaxony 你读过我的问题了吗?看看我的图片,我希望按钮位于 Exit 文本下方。
  • 我不清楚。我将其作为单独的请求阅读,请注意“和”这个词

标签: python wxpython


【解决方案1】:

这是通过将鼠标事件绑定到图像来实现您所追求的一种简单方法。
确保图像的大小基本上是固定的,否则您将不得不开始计算位置。

import wx

class Example(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Mouse Control')
        self.panel1 = wx.Panel(self)
        self.panel2 = wx.Panel(self)
        self.panel3 = wx.Panel(self)
        self.aBitmap = wx.Image(name = "image_button.png").ConvertToBitmap()
        self.bm = wx.StaticBitmap(self.panel2, -1, self.aBitmap)
        self.bm.Bind(wx.EVT_LEFT_DOWN, self.onClick)
        self.bm.Bind(wx.EVT_MOTION, self.onAccess)
        vbox = wx.BoxSizer(wx.VERTICAL)
        vbox.Add(self.panel1,0)
        vbox.Add(self.panel2,0)
        vbox.Add(self.panel3,0)
        self.panel1.SetMinSize(self.bm.GetSize())
        self.panel2.SetMinSize(self.bm.GetSize())
        self.panel3.SetMinSize(self.bm.GetSize())
        self.panel1.SetBackgroundColour("blue")
        self.panel3.SetBackgroundColour("blue")
        self.SetSizerAndFit(vbox)
        self.Show()

    def onClick(self, event):
        x,y = event.GetPosition()
        if y > 25 and y < 50:
            if x > 30 and x < 170:
                wx.MessageBox("Contact", "Contact Header")
            elif x > 800 and x < 860:
                wx.MessageBox("Exit", "Exit Header")
        else:
            event.Skip()

    def onAccess(self, event):
        x,y = event.GetPosition()
        if y > 25 and y < 50:
            if x > 30 and x < 170:
                self.SetCursor(wx.Cursor(wx.CURSOR_HAND))
            elif x > 800 and x < 860:
                self.SetCursor(wx.Cursor(wx.CURSOR_HAND))
            else:
                self.SetCursor(wx.Cursor(wx.CURSOR_DEFAULT))
        else:
            self.SetCursor(wx.Cursor(wx.CURSOR_DEFAULT))
        event.Skip()

if __name__ == '__main__':
    app = wx.App()
    Example()
    app.MainLoop()

此代码通过更改光标表示您已结束hotspot(联系我们,退出)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2020-08-25
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多