PyQt在调整大小/移动时将窗口附加到打开的程序

时间:2013-08-09 12:23:54

标签: python winapi events pyqt win32gui

使用Qt和python,我想创建一个附加到Chrome的窗口,当我调整Chrome窗口大小时,该窗口会移动。现在,我可以在开始时附加到chrome窗口,但我不知道如何获得chrome窗口的移动/调整大小事件来调整main的大小,这是我的QMainWindow。

这是我的代码:

import win32gui
import sys,os,re,getopt
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import win32com.client

def callback(hwnd, main):
    rect = win32gui.GetWindowRect(hwnd)
    x = rect[0]
    y = rect[1]
    w = rect[2] - x
    h = rect[3] - y
    if w>20 and h>20:
        windowName= win32gui.GetWindowText(hwnd)
        if "- Google" in windowName:
            print "Window %s:" % win32gui.GetWindowText(hwnd)
            print "classname %s:" % win32gui.GetClassName(hwnd)
            print "\tLocation: (%d, %d)" % (x, y)
            print "\t    Size: (%d, %d)" % (w, h)
            main.move(x,y+40)
def main():
    app = QApplication(sys.argv)
    main = QMainWindow(None,Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
    main.resize(200,200)
    main.move(400,400)
    qtextedit= QTextEdit(main)
    qtextedit.resize(200,200)
    qtextedit.setPlainText('Hello world')
    qtextedit.setReadOnly(True)
    main.show()
    win32gui.EnumWindows(callback, main)
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

代码如何运作?

main创建一个新的QMainWindow,里面有一个qtextedit。比调用win32gui.EnumWindows,它通过所有打开的窗口。我找到了我要附加的应用 windowName ,其中包含“ - Google”。我将主窗口移动到比主窗口低40px。

问题是当我移动镀铬窗口时,我的窗户不会随之移动。

是否有可能捕获其他窗口的移动事件?

1 个答案:

答案 0 :(得分:0)

现在,我将每秒调用EnumWindows函数来跟踪更改,但它并不是一个很好的解决方案。