【问题标题】:Do focus events work for QDockWidget objects?焦点事件是否适用于 QDockWidget 对象?
【发布时间】:2017-07-20 04:54:19
【问题描述】:

我无法让“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”对象,但它们都没有在聚焦时触发事件。这不是正确的事件吗?另外,我尝试过使用标签,但这也不起作用。任何建议都非常感谢。

【问题讨论】:

    标签: python pyqt pyqt4


    【解决方案1】:

    问题是很多QWidget在Qt::NoFocus模式下都有focusPolicy属性,然后根据doc

    Qt::TabFocus:小部件通过 Tab 键接受焦点。

    Qt::ClickFocus:小部件通过点击接受焦点。

    Qt::StrongFocus:小部件通过 Tab 键和单击来接受焦点。在 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)
    

    【讨论】:

    • 谢谢 eyllanesc,成功了。
    猜你喜欢
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多