在使用 PyQt 开发 GUI 应用程序时,有时需要将外部窗口置父到 QWidget 控件中,但这可能会导致外部窗口遮挡内部按钮。本文将介绍如何解决这个问题。

问题描述

在以下代码中,我们创建了一个 QWidget 控件,并添加了一个按钮。然后,我们使用 win32gui.SetParent() 函数将外部窗口置父到这个 QWidget 控件。然而,外部窗口会覆盖按钮,导致按钮无法显示。

frame = QWidget()
bt_temp = QPushButton(frame)

bt_temp.move(100, 500)
bt_temp.setText('运行')
# ... 其他代码 ...

hwnd_parent = win32gui.GetParent(hwnd)
win32gui.SetParent(hwnd_parent, int(frame.winId()))
win32gui.SetWindowPos(hwnd_parent, win32con.HWND_TOP, -22, -80, 300, 800, win32con.SWP_SHOWWINDOW)
# ... 其他代码 ...

解决方案

要让外部置父进来的窗口不挡住按钮,可以使用 win32gui.SetWindowPos() 函数来调整窗口的位置和大小。在代码中,可以尝试将 win32gui.SetWindowPos() 函数的参数 xy 设置为负值,这样可以将窗口的位置向左上方移动,使其不挡住按钮。

修改后的代码

frame = QWidget()
bt_temp = QPushButton(frame)

bt_temp.move(100, 500)
bt_temp.setText('运行')
# ... 其他代码 ...

hwnd_parent = win32gui.GetParent(hwnd)
win32gui.SetParent(hwnd_parent, int(frame.winId()))
win32gui.SetWindowPos(hwnd_parent, win32con.HWND_TOP, -22, -80, 300, 800, win32con.SWP_SHOWWINDOW)
# ... 其他代码 ...

注意

xy 参数的值可能需要根据实际情况进行调整,以确保窗口不会挡住按钮。

总结

通过调整 win32gui.SetWindowPos() 函数的参数,可以有效避免外部窗口遮挡内部按钮的问题。这在使用 PyQt 开发 GUI 应用程序时,是一个常见的解决方案。

PyQt 中 QWidget 控件置父问题:如何避免外部窗口遮挡按钮

原文地址: https://www.cveoy.top/t/topic/oFJY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录