【问题标题】:Python overlay window [closed]Python覆盖窗口[关闭]
【发布时间】:2012-08-06 22:32:10
【问题描述】:


在 Python 程序中,我想在鼠标指针下绘制一个(可能是形状的)覆盖窗口,它应该跟随它(我已经有代码可以在 mousemove 上获取它的新坐标)并且不能干扰对其他窗口的点击。我的目标平台是 Linux (KDE),但如果它是跨平台的,那就更好了。我该怎么做,例如使用 Tkinter 或 PyQT?
提前感谢您的回答
编辑:我忘了说窗口应该支持透明度(它将是鼠标指针周围的 alpha 混合圆圈)

【问题讨论】:

  • 不是关于 python 的问题,更多的是关于 Qt 或只是一般的 UI 编程

标签: python linux overlay mousemove


【解决方案1】:

在 PyQt 中,您可以创建任何 QWidget 以显示为窗口并使用 QWidget.setGeometry() 设置其在屏幕上的位置。

您可以阅读有关背景透明度的文档: http://qt-project.org/doc/qt-4.8/qwidget.html#autoFillBackground-prop

..这个问题摆脱了窗口边框: How to remove the window border (containing minimize, maximize and close buttons) from a Qt widget?

不过,要避免捕捉到鼠标点击可能会很困难。 最简单的解决方案可能是使用 QWidget.setMask 或 Qt::WA_TransparentForMouseEvents (请参阅上面的第一个链接),但我敢打赌,这在某种程度上取决于操作系统的窗口管理器,并且不受程序的控制。一种可能的解决方法可能是将您的界面拆分为多个单独的窗口,这些窗口平铺在光标周围。

【讨论】:

  • 但是我需要“转移”我的覆盖窗口下的点击,就好像它不存在一样......
  • 现在这很棘手。请参阅我的更新答案。
  • 我会尝试,但我对 PyQt 很陌生...
  • 我在用 win.move(x,y) 移动(现在是空的)QWidget 时遇到了一些问题,它似乎已被缓存,并且仅定期应用。 setGeometry 也是如此。
  • 也许尝试在调用 setGeometry 之后立即调用 QApplication.processEvents()?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
相关资源
最近更新 更多