我无法让“focusInEvent”在PyQt4中为QDockWidget派生的类工作。我一直在寻找,似乎我的事件的重新实现语法是正确的,但我的事件处理程序中的代码永远不会被执行(我在事件代码块中设置断点但它永远不会被触发)。这就是我所做的:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class ToolWindow(QDockWidget):
def __init__(self, title, parent = None):
super(ToolWindow, self).__init__(title, parent)
...initialization code here...
def focusInEvent(self, event):
..do on-focus work here...
在运行时,我通过鼠标点击将焦点设置到底座上。我在停靠窗口标题栏上以及停靠客户端空间中都单击,但没有任何内容触发事件。我点击了我的应用程序中的其他“ToolWindow”对象,当聚焦时,它们都没有触发事件。这不是正确的事件吗?此外,我尝试了四处选择,但这也无效。任何建议都非常赞赏。
答案 0 :(得分:1)
问题在于,许多QWidgets在Qt::NoFocus
模式下具有focusPolicy
属性,然后根据doc。
Qt :: TabFocus :小部件通过标签接受焦点。
Qt :: ClickFocus :小部件通过点击接受焦点。
Qt :: StrongFocus :小部件通过标签和点击接受焦点。在macOS上,这也表明小部件在“文本/列表焦点模式”下接受标签焦点。
Qt :: WheelFocus :像Qt :: StrongFocus一样,小部件通过使用鼠标滚轮接受焦点。
Qt :: NoFocus :小部件不接受焦点。
因此,要激活焦点,我建议将该属性更改为 Qt :: StrongFocus 。
class ToolWindow(QtGui.QDockWidget):
def __init__(self, title, parent = None):
super(ToolWindow, self).__init__(title, parent)
self.setFocusPolicy(QtCore.Qt.StrongFocus)