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

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

我不确定,但我相信这是由于某种原因focusPolicy,我试图找到解决方案,但我找不到。即使在显示菜单时,我只想在小部件的按钮上使悬停效果可用。

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 值,而不是样式表。

回答

TL; 博士;你想要的行为是不可能的。

解释:

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


以上是如何在显示QMenu时将鼠标焦点转移回?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>