【问题标题】:Tooltips or status bar not working in a PyQt app from Maya工具提示或状态栏在 Maya 的 PyQt 应用程序中不起作用
【发布时间】:2011-07-22 11:14:56
【问题描述】:

我有一个 PyQt4 QDialog,我在 Autodesk Maya 中从 python 启动。我想在窗口中有一个状态栏,或者,如果需要的话,工具提示。玛雅似乎也不赞成。我已经使用这里描述的方法实现了它:

http://www.qtcentre.org/threads/10593-QDialog-StatusBar

如果我独立启动我的应用程序,两者都可以正常工作。但是,从 Maya 运行时,状态更新会发送到一般的 Maya 状态栏(如果您在不同的窗口中,这不是很明显),并且 Maya 似乎完全从我那里窃取了事件:如果我监视事件我的 event() 方法正在获取,它永远不会获取 QEvent.StatusTip 事件。我尝试将 QDialog 换成 QMainWindow,但它似乎没有任何改变。

有什么建议可以让这个工作正常进行吗?

【问题讨论】:

    标签: python qt pyqt maya


    【解决方案1】:

    目前,我正在以一种可怕的方式解决这个问题:对我想要使用的每个小部件进行子类化,并添加一个发送给父级的信号self.setMouseTracking(True),以及一个发送信号的mouseMoveEvent(self, e)给父母。然后在树的顶部设置状态栏。这是让我感觉很脏的那种讨厌的代码,子类化了所有的小部件类型,但它似乎确实有效。 非常感谢收到任何更好的建议!

    【讨论】:

    • 应该将其撤销为已接受的答案。这不是一个好的解决方案。
    【解决方案2】:

    我也需要解决这个问题,所以你的帖子很有帮助。

    当我之前遇到过这样的事件问题时,我通过在所有小部件(相同的过滤器)上使用 installEventFilter 来解决它,而不是子类化。然后您可以接收并接受事件以阻止它们与 Maya 接触(或让它们通过,例如用于在您的 gui 上标记菜单的空格键等)

    这是我用来让 Maya 拥有空格键(标记菜单)、ctrl+A(属性编辑器切换)和 ctrl+Z(撤消)的方法。这将被添加到您的事件过滤器中:

    if event.type() == QEvent.KeyPress:
        key = event.key()
        mod = event.modifiers()
        if ((ctrla and key == Qt.Key_A and mod == Qt.ControlModifier) or # CTRL+A
            (ctrlz and key == Qt.Key_Z and mod == Qt.ControlModifier) or # CTRL+Z
            (space and key == Qt.Key_Space)):                            # Space Bar
            event.ignore()
            return True
    
    return False
    

    你只需要做相反的事情并使用event.accept()return False

    【讨论】:

      【解决方案3】:

      对于 QWidgets,colts answer here 很不错。

      这就是我让它为 QActions 工作的方式:

      class ActionFn(object):
          def __init__(self, action):
              self.action = action
          def __call__(self):
              self.action.parent()._displayStatusTip(self.action.statusTip())
      

      那么在动作创建之后:

      newAction._statusFn = _StatusTipActionFn(newAction)
      newAction.hovered.connect(newAction._statusFn)
      

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-16
        • 1970-01-01
        • 2014-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多