为工具做一个悬浮窗口,使其在开启时,永远处于电脑所有的窗口的前方。
博客1: PyQt5 技巧篇-窗口置顶设置,如何使窗口始终显示在最前面
博客2: pyqt5窗口相关设置
只需要使用一行代码:
Dialog.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
该方法经过测试,在window系统中可以实现,效果为: 当子窗口浮现在主窗口之前时,点击主窗口无法覆盖子窗口。
然而在linux系统中,该效果不存在,可被点击后覆盖。
博客3: PyQt5 将窗口暂时置于所有窗口最前方(唤醒窗口、窗口置顶)
Widget类中又raise()方法可以实现这个功能。
(由于在python3中 raise 是一个关键字,所以在PyQt5中这个方法的名字为 raise_,即widget.raise_()
Dialog.raise_()
在linux系统上也没有效果。
博客4: PyQt5 技术篇-窗口置顶不生效解决办法,setWindowFlags()设置不生效解决办法
可能情况被覆盖,例如:
Dialog.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) # 设置窗口置顶
Dialog.setWindowFlags(QtCore.Qt.WindowCloseButtonHint) # 设置只有关闭按钮
如果有多个setWindowFlags(),只有最后一个生效,因为是覆盖式设置。
合并参数来解决:
Dialog.setWindowFlags(QtCore.Qt.WindowCloseButtonHint|QtCore.Qt.WindowStaysOnTopHint)
但是该情况与遇到的问题不符。
博客5: QT模态对话框和非模态对话框
模态对话框就是指在子对话框弹出时,焦点被强行集中于该子对话框,子对话框不关闭,用户将无法操作其他的窗口。非模态相反,用户仍然可以操作其他的窗口,包括该子对话框的父对话框。
如果从线程角度来讲,模态对话框实际上是线程阻塞的,也就是子对话框是一个线程,但是在创建这个子线程之后,父窗口就阻塞了;非模态对话框则不是阻塞型的线程模型,父子线程可以并行运行。
在Qt中创建模态对话框,主要用到了QDialog的exec函数。