2016-02-24 4 views
0

я в настоящее время этот виджет диалога:Пользовательское контекстное меню в QTreeView

class TaskTypeTreeEditor(QDialog): 
    def __init__(self, parent=None): 
     super().__init__(parent) 
     self._view = QTreeView() 
     self._view.setItemDelegate(TaskTypeNameDelegate()) 
     self._view.setContextMenuPolicy(Qt.CustomContextMenu) 
     self._view.customContextMenuRequested.connect(self._open_menu) 

     self._refresh() 

     layout = QVBoxLayout() 
     layout.addWidget(self._view) 

     self.setLayout(layout) 
     self.setWindowTitle(_('Admin.editTaskType')) 

    def _open_menu(self, position): 
     indexes = self._view.selectedIndexes() 
     if len(indexes) == 0: 
      return 

     menu = QMenu() 
     ids = [index.internalPointer().type_id for index in indexes] 

     if len(indexes) == 1: 
      NewTypeAction(ids[0], self._refresh, menu) 

     DeleteTypeAction(ids, self._refresh, menu) 

     menu.exec_(self._view.viewport().mapToGlobal(position)) 

    def _refresh(self): 
     model = TaskTypeTreeModel() 
     self._view.setModel(model) 
     self._view.expandAll() 

Это было основано на другой проект из вики Python. Предполагая, что NewTypeAction и DeleteTypeAction являются подклассами QAction, и их конструкторы соответствующим образом вызывают QAction.__init__ с родителем menu, почему при первом щелчке правой кнопки мыши в моем представлении не отображается меню?

+0

Образованное предположение: потому что 'indexes' пуст? – ekhumoro

+0

@ekhumoro Nope. Я сделал быстрый тест, и он продолжает выполняться. Похоже, что на самом деле создается пустым меню, несмотря на то, что я передал родительский элемент при создании действия. Я могу сказать, потому что мой следующий щелчок игнорируется после щелчка правой кнопкой мыши; Раньше я этого не замечал. – 2mac

+0

Ну, так как никто другой не может увидеть соответствующий код, я полагаю, вам решать остальную часть отладки ;-) – ekhumoro

ответ

0

Получил это. Я забыл позвонить menu.addAction для обоих моих новых действий.

Смежные вопросы