我希望能够在屏幕上拖动我的半透明应用程序窗口,并且" drop"当我放手时,它到指针下面的任何一个窗口。此时,我希望我的GUI窗口重新配置自身以与目标窗口一致。使目标窗口从除了我的所有窗口后面出来也是很好的。
好吧,最后,我有一些代码要分享。它主要起作用,但它并不总是抓住整个目标窗口。有时它只抓取一部分。如果您有任何想法,请将它们放在我身上。要激活抓取,我将窗口拖到目标上方的某个位置,将鼠标指针移动到它们重叠的区域中的任何位置,然后键入" w。"输入" w"再次将我的窗口恢复到以前的状态。我花了很长时间来弄明白这一点,因为我是一名初学者。我认为,最终决议变得非常简单明了。但是,我希望能够帮助简化代码。它有一种kludgy的感觉。提前谢谢。
if (e.key() == Qt.Key_W):
if (self.makeBaby):
self.makeBaby = False
self.setGeometry(self.previousGeometry)
self.updateStuff() #> Redraw everything after getting <#
#> off her. How do you know it's a <#
#> girl? Her mouth is open. <#
else:
self.makeBaby = True
Joe = self.geometry()
self.previousGeometry = Joe
self.windowHandle = win32gui.WindowFromPoint((QCursor.pos().x(), QCursor.pos().y()))
#> Get my window's handle. <#
self.move(self.ws, self.hs)
#> Get out of the way. <#
windowHandle = win32gui.WindowFromPoint((QCursor.pos().x(), QCursor.pos().y()))
#> Get the target window's handle. <#
windowRect = win32gui.GetWindowRect(windowHandle)
#> Get its geometry. <#
x = windowRect[0]
y = windowRect[1]
w = windowRect[2] - x
h = windowRect[3] - y
self.move(Joe.x(), Joe.y())
#> Return to the playing field. <#
win32gui.SetWindowPos (windowHandle, self.windowHandle, x, y, w, h, win32con.SWP_NOSIZE|win32con.SWP_NOMOVE)
#> Position the target window under <#
#> my window. <#
self.raise_() #> This and the next line are <#
#> necessary. I don't understand why. <#
self.activateWindow()
self.setGeometry(x, y, w, h)
#> Match my window's geometry to the <#
#> target's. <#
self.updateStuff() #> Give her a new coat of paint. <#