PyQt/Demo/README.md
2019-01-07 16:18:00 +08:00

5.3 KiB
Raw Blame History

Demo

1、重启窗口Widget

运行 RestartWindow.py

利用类变量对窗口的变量进行引用,防止被回收(导致窗口一闪而过),重启时先显示新窗口后关闭自己

RestartWindow

2、简单的窗口贴边隐藏

运行 WeltHideWindow.py

  1. 大概思路

    1. 思路是当窗口进入左边,顶部,右边一半时,此时判断窗口的坐标
    2. 如果窗口的x坐标小于0 则需要隐藏到左边
    3. 如果窗口的y坐标小于0 则需要隐藏到顶部
    4. 如果窗口的x坐标大于屏幕宽度-窗口宽度/2 则需要隐藏到右边
  2. 事件说明

    1. mousePressEvent,鼠标按下事件,主要记录按下的坐标
    2. mouseMoveEvent,鼠标移动事件,用于移动窗口
    3. mouseReleaseEvent,鼠标弹起事件,用于判断是否需要隐藏窗口
    4. enterEvent,鼠标进入事件,用于窗口隐藏后,是否需要暂时显示预览
    5. leaveEvent,鼠标离开事件,用于窗口暂时显示后自动隐藏效果

WeltHideWindow

3、嵌入外部窗口

运行 EmbedWindow.py

  1. 使用SetParent函数设置外部窗口的parent为Qt的窗口
  2. Qt使用QWidget.createWindowContainer(QWindow.fromWinId(窗口ID))生成QWidget
  3. 使用GetWindowLong得到原来窗口的样式属性style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE)exstyle = win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE)
  4. 这里还原窗口后不会显示用spy++发现没有了WS_VISIBLE样式未解决

EmbedWindow

4、简单跟随其它窗口

运行 FollowWindow.py

  1. 利用win32gui模块获取目标窗口的句柄
  2. 通过句柄获取目标窗口的大小位置,并设置自己的位置
  3. 当句柄失效时关闭自己
  4. 主要是检测时间在10毫秒以下很流畅

FollowWindow

5、简单探测窗口和放大截图

运行 ProbeWindow.py

  1. 利用win32gui模块获取鼠标所在位置的窗口大小(未去掉边框)和rgb颜色
  2. 利用一个全屏的全透明鼠标穿透的窗口(目的在于绘制矩形框和截图)

ProbeWindow

6、无边框自定义标题栏窗口

运行 FramelessWindow.py | 运行 NativeEvent.py

  1. 重写鼠标事件

    1. 使用一个QWidgetFramelessWindow)作为父窗口, 一个TitleBar作为标题栏, 一个QWidget作为底部容器
    2. 父窗口FramelessWindow设置为背景透明,但是需要绘制一定宽度的透明度很高的矩形边框用来接受鼠标事件(变形鼠标样式进行调整窗口大小)
    3. TitleBar的最小化最大化关闭等按钮事件关联到父窗口里
    4. TitleBar中的鼠标按下移动事件得到坐标也传递到父窗口调用move方法进行窗口移动
  2. windows api

    1. 使用win32gui设置薄边框
    2. 重写nativeEvent事件拦截边框的系统边框的显示,并返回各个方向

FramelessWindow

7、右下角弹出框

运行 WindowNotify.py

WindowNotify

8、程序重启

运行 AutoRestart.py

AutoRestart

9、自定义属性

运行 CustomProperties.py

CustomProperties

10、调用截图DLL

运行 ScreenShotDll.py

ScreenShotDll

11、单实例应用

运行 SingleApplication.py | 运行 SharedMemory.py

  1. QSharedMemory
  2. QLocalSocket, QLocalServer

12、简单的右下角气泡提示

运行 BubbleTips.py

  1. 使用 QWidget 包含一个 QLabel, 其中 QWidget 通过 paintEvent 绘制气泡形状
  2. 使用 QPropertyAnimation 属性动画来移动气泡和改变气泡的透明度
  3. 使用 QParallelAnimationGroup 动画组来同时运行两个动画

BubbleTips

13、右侧消息通知栏

运行 Notification.py

Notification

14、验证码

运行 VerificationCode.py

  1. 更新为paintEvent方式,采用上下跳动
  2. 参考网上一些代码都是采用paintEvent绘制这里采用QLabel显示html结合字体来显示文字
    然后在paintEvent中绘制噪点和线条

VerificationCode

15、人脸特征点

运行 FacePoints.py

PyQt 结合 Opencv 进行人脸检测; 由于直接在主线程中进行特征点获取,效率比较低

依赖文件

  1. opencv
  2. numpy
  3. dlib
  4. dlib-19.4.0.win32-py2.7.exe
  5. dlib-19.4.0.win32-py3.4.exe
  6. dlib-19.4.0.win32-py3.5.exe
  7. shape-predictor-68-face-landmarks.dat.bz2

FacePoints