Python 如何在显示QMenu时将鼠标焦点移回?

Python 如何在显示QMenu时将鼠标焦点移回?,python,pyside2,Python,Pyside2,我有两个按钮,两个都有悬停效果。第一个按钮也有一个菜单,问题是,当单击第一个按钮并出现菜单时,在关闭菜单之前,鼠标悬停不会同时作用于第二个按钮 我不确定,但我相信这是由于某种聚焦策略造成的,我试图找到解决方案,但没有找到。我只想让小部件的按钮上的悬停效果即使在显示菜单时也可用 from PySide2 import QtWidgets, QtGui, QtCore import sys class MyWidget(QtWidgets.QWidget): def __init__(se

我有两个按钮,两个都有悬停效果。第一个按钮也有一个菜单,问题是,当单击第一个按钮并出现菜单时,在关闭菜单之前,鼠标悬停不会同时作用于第二个按钮

我不确定,但我相信这是由于某种
聚焦策略造成的,我试图找到解决方案,但没有找到。我只想让小部件的按钮上的悬停效果即使在显示菜单时也可用

from PySide2 import QtWidgets, QtGui, QtCore
import sys

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        super(MyWidget, self).__init__()
        self.resize(300, 300)
        layout = QtWidgets.QHBoxLayout(self)

        btn = QtWidgets.QPushButton('Button 1')
        btn.setStyleSheet('QPushButton::hover{background-color: gray;}')
        layout.addWidget(btn)
        menu = QtWidgets.QMenu(self)
        action = QtWidgets.QAction('buttonAction', menu)
        menu.addAction(action)
        btn.setMenu(menu)
        
        btn = QtWidgets.QPushButton('Button 2')
        btn.setStyleSheet('QPushButton::hover{background-color: gray;}')
        layout.addWidget(btn)

        self.setLayout(layout)

app = QtWidgets.QApplication([])
wig = MyWidget()
wig.show()
sys.exit(app.exec_())

请注意,我甚至尝试使用
evenFilter
Enter
/
Leave
事件上更改颜色,并返回
True
/`False值,而不是样式表;博士你想要的行为是不可能的

说明:
只有一个窗口可以具有焦点,并且只有属于该窗口的小部件可以获得焦点。在这种情况下,QMenu位于原始窗口顶部的另一个窗口中,该窗口具有焦点,不再是原始窗口。

是否有其他替代方法来实现我所寻找的行为?@Don't我认为我的答案很清楚。您想要的是不可能的,因为Qt(和许多其他库)声明单个窗口具有焦点。由于您的回答表明无法实现我所寻找的确切行为,我稍微更改了我的要求,我能够使用
QMenu
about-show
about-hide
信号来实现新的要求,这在理论上是可能的,但极难实现,可能不可能以透明和容易使用的方式来实现,同时保持它的可靠性,不容易出现错误或意外行为。考虑到预期的结果以及它可能工作得非常糟糕并产生bug的事实,这真的不值得付出努力。