2016-07-25 21 views
1

VTQのコンテキストメニューの位置に問題があります。Python VTKコンテキストメニューがマウスの位置にありません

from vtk_widget.vtk_widget import VTKWidget 

class DySMainWindow(QtGui.QMainWindow): 
    def __init__(self): 

     self.vtk_widget = VTKWidget(self) 
     self.setCentralWidget(self.vtk_widget) 

をしてVTK widgetは次のとおりです:メインGUIウィンドウは、中央ウィジェットとしてVTKのウィジェットを設定している

import vtk 
from vtk.qt4.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor 
from PyQt4 import QtGui, QtCore, Qt 


class VTKWidget(QVTKRenderWindowInteractor): 
    def __init__(self, MBD_system=None, parent=None): 
     super(VTKWidget, self).__init__(parent) 
     # this should show context menu 
     self.AddObserver("RightButtonPressEvent", self.contextMenu) 

     self.renderer = vtk.vtkRenderer() 
     self.GetRenderWindow().AddRenderer(self.renderer) 

     self.interactor = self.GetRenderWindow().GetInteractor() 
     self.interactor.SetInteractorStyle(vtk.vtkInteractorStyleTrackballCamera()) 

     # camera object 
     self.camera = self.renderer.GetActiveCamera() 
     if self.projection == 'perspective': 
      self.camera.ParallelProjectionOff() 
     else: 
      self.camera.ParallelProjectionOn() 

     self.renderer.SetActiveCamera(self.camera) 
     self.renderer.ResetCamera() 
     self.renderer.SetBackground(0, 0, 0) 
     self.interactor.Initialize() 

    def contextMenu(self, caller, event): 
     pos = self.interactor.GetEventPosition() 

     menu = QtGui.QMenu(parent=self) 
     menu.addAction(self.tr("Edit object")) 

     menu.exec_(self.mapToGlobal(QtCore.QPoint(pos[0], pos[1]))) 

これを解決するすべてのヘルプをいただければ幸いです。

答えて

2

contextmenyイベントメソッドはポイントを入力として受け取ります。私たちはあなたのメニューがqMenuVTKと呼ばれていることを前提とし、親ウィンドウを持っている場合は、次のように動作するはずです:

あなたrightbuttonpresseventで次の行を追加します。

self.parent.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) 
self.parent.customContextMenuRequested.connect(self.onContextMenu) 

そしてメソッドイベントは、次のようになります。

def onContextMenu(self, point): 
    self.qMenuVTK.exec_(self.parent.mapToGlobal(point)) 
+0

少し違ったアプローチで解決しましたが、あなたの方がいいです(私はマウスとのやり取りに関連した問題が1つありました)。 – avstenit

関連する問題