焦点事件是否适用于QDockWidget对象?

时间:2017-07-19 20:21:39

标签: python pyqt pyqt4

我无法让“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”对象,当聚焦时,它们都没有触发事件。这不是正确的事件吗?此外,我尝试了四处选择,但这也无效。任何建议都非常赞赏。

1 个答案:

答案 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)