python - 如何使用 setWindowLongPtr (hwnd, GWL_EXSTYLE, WS_EX_NOACTIVATE)?
问题描述
我需要一个具有以下属性的窗口:
- 它应该始终在顶部。
- 能够接收鼠标事件(移动和点击)。
- 单击时不会窃取键盘焦点。
由于不存在通过 Qt 的解决方案,我知道我们必须使用 Windows 平台的 Win32 API。我必须使用这个调用:
SetWindowLongPtr(hwnd, GWL_EXSTYLE, WS_EX_NOACTIVATE)
但是我怎样才能在我的 Python 代码中实现它呢?
在这里很好地解释了:qt_forum。
我的代码:
class Ui_self(QWidget):
def __init__(self):
super().__init__()
self.resize(150, 200)
self.secret_button = QtWidgets.QPushButton(self)
self.secret_button.setText("# tag")
elf.setWindowFlags(Qt.WindowStaysOnTopHint)
elf.setWindowFlags(Qt.FramelessWindowHint)
self.secret_button.setFocusPolicy(Qt.NoFocus)
self.setFocusPolicy(Qt.NoFocus)
self.setAttribute(Qt.WA_ShowWithoutActivating)
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Ui_self()
ex.show()
sys.exit(app.exec())
解决方案
您需要获取 HWND,然后使用 SetWindowLong:
import win32gui
import win32con
from ctypes.wintypes import HWND
hw = HWND(int(self.winId()))
win32gui.SetWindowLong(hw, win32con.GWL_EXSTYLE, win32con.WS_EX_NOACTIVATE)
推荐阅读
- tensorflow - 将 onnx 模型转换为 .pb 模型时出现“未实现 Einsum”错误?
- linux - 我有 shell 脚本,它接受两个日期参数,需要验证 dd-mm-yyyy 格式的两个参数
- android - 如何查询开始日期的日期>结束日期的日期?
- java - 使用 RequestSpecBuilder 创建 GET 请求
- gruntjs - 如何在 gruntfile.js 中正确使用数组变量
- python - 将基于列表值的多个python列表合并为一个
- javascript - JavaScript - Rhino Android 库 - 在 Android 代码中调用
- kubernetes - Google Cloud 上的持久卷 Kubernetes
- javascript - 如何使用 JavaScript 将 TextArea 文本旋转 180 度
- angular - Angular库中是否可以同时拥有内部和公共API