如何在显示 QMenu 时将鼠标焦点转移回来?
How to transfer mouse focus back while showing a 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;博士;您想要的行为是不可能的。
解释:
只有一个 window 可以获得焦点,并且只有属于那个 window 的小部件可以获得焦点。在这种情况下,QMenu 位于原始 window 之上的另一个 window 中,而 window 是具有焦点的那个,不再是原始 window .
我有两个按钮,它们都有一些悬停效果。第一个按钮也有一个菜单,问题是,当单击第一个按钮并出现菜单时,鼠标悬停不会同时对第二个按钮起作用,直到菜单关闭。
我不确定,但我相信这是由于某种原因 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;博士;您想要的行为是不可能的。
解释:
只有一个 window 可以获得焦点,并且只有属于那个 window 的小部件可以获得焦点。在这种情况下,QMenu 位于原始 window 之上的另一个 window 中,而 window 是具有焦点的那个,不再是原始 window .