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