如何在 PyQt5 Python 中单击按钮时将焦点设置到旧 window?

How to set focus to the old window on button click in PyQt5 Python?

我当前的项目是使用我的个人功能创建一个屏幕键盘供我个人使用。我用 Python 在 PyQt5 中制作了 gui 和主要功能。我设法使用 pyautogui.write() 方法在单击按钮时键入字母。但问题是,我想打字的地方没有焦点。假设我想在 chrome 的地址栏或我显示器上的任何其他输入字段上书写。当我单击按钮键入字母时,chrome 失去了焦点。我想在按下任何按钮时将焦点设置到旧的 window。我在 google 上对此进行了搜索,但没有找到任何答案。我怎样才能将焦点设置到旧 window?或者有没有更好的方法来输入焦点丢失状态?

您不应该尝试“将焦点放回原处”,因为几乎不可能知道 window 之前有什么焦点(同时可能会引发新的 window) .你实际上应该做的是 防止 你的 window 获得焦点,从而避免它从其他人那里窃取焦点。

为了实现这一点,您必须设置适当的 window flag(或使用 flags 关键字参数用它初始化小部件),这是 Qt.WindowDoesNotAcceptFocus.
请注意,您可能还想设置 Qt.WindowStaysOnTopHint 以便始终使您的 window 高于其他人:

class MyKeyboard(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowFlags(
            QtCore.Qt.WindowDoesNotAcceptFocus
            | QtCore.Qt.WindowStaysOnTopHint
        )