2014-10-15 4 views
1

Есть ли способ заблокировать доки в pyqtgraph, чтобы пользователь не мог их перемещать?pyqtgraph Блокировка док-станции

Я использую небольшой сенсорный экран для отображения приложения pyqtgraph с несколькими доками. Пользователю очень легко случайно перемещать док-станцию. Когда это происходит, экран становится непригодным из-за размера. Я хотел бы запретить пользователю перемещать доки.

Однако пользователь должен иметь возможность выбирать между доками (т. Е. Рассматривать их как виджет вкладки).

Чтобы быть ясным, я хочу, чтобы док не был отсоединен, и я хочу, чтобы док не был наркотиком в новое место.

Спасибо, Крис

ответ

0

мне удалось отключить возможность отделяться и перетаскивать доки переопределения методов класса Dock.

Перемещение док-станции переводит его в другое место. Поэтому я перевернул все обработчики событий «drag» с помощью методов, которые ничего не делают (т. Е. No-op).

Двойной щелчок на ярлыке дока может привести к отсоединению док-станции. Таким образом, я перепробовал обработчик событий двойного щелчка на доке с помощью no-op.

Замените Dock MyDock в своем коде. UPDATE: я добавил код, чтобы переопределить методы перетаскивания для DockArea, потому что я все еще мог перемещать DockAreas.

Вот код:

## 
# 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