【问题标题】:Why can't I draw onto two different bitmaps in wxPython?为什么我不能在 wxPython 中绘制两个不同的位图?
【发布时间】:2021-03-30 15:13:56
【问题描述】:

我正在尝试在位图对象上绘制一个按钮。根据 y 位置,如果 y 位置在 bmp1 的高度值范围内,它应该在 bitmap1 上绘制,如果不在,则应该在 bitmap2 上绘制。 由于某种原因,这不起作用:

wx.Button(bitmap1 if ypos <= bmp1.GetHeight() else bitmap2, label='Run', id=i, pos=(xpos, ypos))

我只能在一个 wx.StaticBitmap 图像或面板上绘制按钮。图像父母是面板。

如果我想在位图之间直接切换到面板上,这很好用。

什么给了?

注意: 我设法解决了这个问题,使用 PIL 创建了一个足够大的动态图像以容纳我生成的按钮(连续的 y 大小,根据它们的数量和位置),但是这个想法/代码应该仍然有效。

如果我用 'bitmap2' 值代替面板,并将面板上绘制的 bitmap2 图像移动一点,然后我看到程序在 bitmap2 下方绘制。为什么?图像的放置方式和bitmap1一模一样,bitmap1用按钮在上面绘制没有问题吗? :O

【问题讨论】:

  • 坦率地说,我很惊讶你 can 在按钮定义中包含 if 语句,这导致我很困惑,但你不能只将任何小部件设为 child任何其他小部件。 parent 小部件必须能够处理 child 小部件,例如wx.Framewx.Panel。我已准备好对此进行更正,因为您已经设法完成了我认为不可能的事情。 ;)
  • @RolfofSaxony 是否有足够的理由拒绝投票?无论如何 - 你可以在这里做 ifs,如你所见。但是我的问题是绘图似乎只能在一张图片和面板上完成,而不能在一张图片或另一张图片上完成。我正在这样做 - 指定要绘制的父级,但如果一个已完成,它似乎不想在两个图像上绘制。我正在生成 n 个按钮。有什么帮助吗?
  • @RolfofSaxony 如果对思考过程有帮助,我添加了一个带有更多上下文的注释
  • cmet 的人不一定是反对者。这不是我的反对票。我对if 的声明太惊讶了,根本不考虑投票。

标签: python wxpython


【解决方案1】:

我发现了问题:

按钮的父对象应该根据父对象的尺寸获取 ypos,而不是在框架上绘制的位置,如下所示:

wx.Button(bitmap1 if ypos <= bmp1.GetHeight() else bitmap2, label='Run {i}', id=i, pos=(80, ypos if ypos <= bmp1.GetHeight() else ypos-img_height))

ypos if ypos

终于!

【讨论】:

  • 干得好!但是,请考虑为位图、位置等创建变量,因为这种方法很可能被证明难以维护。这是一种非常奇怪的做事方式,但如果您对此感到满意,那很好。 Python 证明有很多方法可以给猫剥皮。
  • @RolfofSaxony 我认为这是我的一个菜鸟错误,但我错误地假设这两个图像的绘图都处于绝对帧坐标中。我错了,因为按钮有它们的父级,但这是循环处理的,我有点迷茫。我正在进行的坐标方案很容易使用 7-10 个变量来维护。我的 UI 中的大多数元素都是根据扫描路径生成的,因此有一个循环并使其动态化是有意义的。
猜你喜欢
  • 2015-09-20
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 2016-04-18
  • 2013-07-21
  • 2023-03-03
  • 1970-01-01
  • 2021-11-19
相关资源
最近更新 更多