Python& QT:创建翻转帮助区域

时间:2015-05-30 22:31:32

标签: python qt nuke

我有一个足够复杂的UI,用户可以使用一些帮助。我尝试过工具提示,但我不喜欢他们如何创建UX分心。我想要的是有一个总是出现帮助的区域,文字会根据你悬停鼠标的位置而改变。

处理此问题最有效的方法是什么?子类化工具提示?我想过eventFilter,但是我已经用它来捕获QTextEdit框的按键,我不知道如何才能使它适用于每个对象。我对我来说是一个新的领域,所以任何帮助都会非常感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

虽然我还没有完成你感兴趣的事情,但我很清楚我将如何处理它(至少在最初阶段),它确实涉及使用你自己的事件过滤器对象。以下是基础知识:

  1. 将您自己的QObject子类实现为事件过滤器。这应该采用并存储您要用于显示帮助文本的小部件实例(例如,QLabel)。
  2. 在您的事件过滤器对象上,实施eventFilter以查找QEvent::Enter个事件并相应地设置帮助文本,但不要使用该事件。您需要提供一个系统,用于将发出事件的对象(即光标所在的对象)映射到应显示的帮助文本。
  3. 实例化您的过滤器并使用installEventFilter将其添加到您要触发帮助文本显示的每个小部件中。
  4. 这里有一些骨架代码:

    class HelpTextFilter(QtCore.QObject):
        def __init__(self, helpTextWidget):
            super(HelpTextFilter, self).__init__(helpTextWidget)
            # Could call self.parent() to get this every time instead of
            # storing it, but that's potentially a lot of method calls.
            self.helpTextWidget = helpTextWidget
    
        def eventFilter(self, sender, event):
            if event.type() == QtCore.QEvent.Enter:
                # Get the help text for 'sender' here...
                self.helpTextWidget.setText(helpText)
            return False
    
    # Registration
    evFilter = HelpTextFilter(helpTextDisplayWidget)
    for widget in widgetsThatNeedHelpTextDisplayed:
        widget.installEventFilter(evFilter)
    

    希望能帮助你。