1

有没有办法在 pyqtgraph 中锁定停靠点,以便用户无法移动它们?

我正在使用一个小触摸屏来显示具有多个停靠点的 pyqtgraph 应用程序。用户很容易意外移动扩展坞。当发生这种情况时,屏幕由于尺寸而变得无法使用。我想阻止用户移动码头。

但是,用户仍然必须能够在停靠点之间进行选择(即将它们视为选项卡小部件)。

为了清楚起见,我想防止码头被分离,我想防止码头被毒品带到新的位置。

谢谢,克里斯

4

1 回答 1

0

我设法通过覆盖 Dock 类的方法来禁用分离和拖动码头的能力。

拖动停靠栏会将其移动到另一个位置。所以我用什么都不做的方法(即无操作)覆盖了所有的“拖动”事件处理程序。

双击扩展坞的标签将导致扩展坞分离。因此,我使用无操作覆盖了停靠栏标签的双击事件处理程序。

在您的代码中将 Dock 替换为 MyDock。更新:我也添加了代码来覆盖 DockArea 的拖动方法,因为我仍然能够移动 DockArea。

这是代码:

##
# This class is used to eliminate a standard Dock class' ability to detach and
# move (i.e. dragging this Dock will have no effect)
#
class MyDock(Dock):
    def __init__(self, name, area=None, size=(10, 10), widget=None, hideTitle=False, autoOrientation=True):

        # Initialize the baseclass
        #
        Dock.__init__(self, name, area, size, widget, hideTitle, autoOrientation)

        # Override the label's double click event.  Normally double clicking
        # the dock's label will cause it to detach into it's own window.
        #
        self.label.mouseDoubleClickEvent=self.noopEvent

    def dragEventEnter(self, ev):
        pass

    def dragMoveEvent(self, ev):
        pass

    def dragLeaveEvent(self, ev):
        pass

    def dragDropEvent(self, ev):
        pass

    def noopEvent(self,ev):
        pass

class MyDockArea(DockArea):
    def dragEventEnter(self, ev):
        pass

    def dragMoveEvent(self, ev):
        pass

    def dragLeaveEvent(self, ev):
        pass

    def dragDropEvent(self, ev):
        pas
于 2014-10-15T18:51:59.837 回答