2011-11-04 2 views
3

대화식 SVG 파일을 QGraphicsScene에 추가하는 방법은 무엇입니까? 대화 형 SVG 파일을 추가 할 수는 있지만 정적 인 이미지로 표시됩니다. QGraphicsWebView에 대해 읽었지만 SVG 파일을 추가하는 방법과 예제가 부족하다는 것을 알 수 없습니다.대화 형 SVG 이미지가있는 pyQt

제가 찾고있는 것보다 좀 더 구체적으로 설명하겠습니다. 상자를 그리는 SVG 파일이 있다고 가정 해 봅시다. 마우스를 해당 상자 위에 올려 놓을 때 호버 이벤트로 인해 변경되도록 색을 지정하고 싶습니다. 파일을 편집하고 이미지를 다시 그려야합니까? Qt로 대화식 SVG 파일을 만드는 방법이 있어야하는 것처럼 느껴집니다.

답변

5

나는 똑같은 문제가 있었고 귀하의 질문은 올바른 방향으로 (QGraphicsWebView() 사용) 나를 지적했습니다. 솔루션은 실제로 매우 간단합니다 : 그것은 나를 위해 완벽하게 작동

import sys 
from PyQt4 import QtCore, QtGui, QtSvg 
from PyQt4.QtWebKit import QGraphicsWebView 
if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 

    scene = QtGui.QGraphicsScene() 
    view = QtGui.QGraphicsView(scene) 

    br = QtSvg.QGraphicsSvgItem("C:\your_interactive_svg.svg").boundingRect() 

    webview = QGraphicsWebView() 
    webview.load(QtCore.QUrl("C:\your_interactive_svg.svg")) 
    webview.setFlags(QtGui.QGraphicsItem.ItemClipsToShape) 
    webview.setCacheMode(QtGui.QGraphicsItem.NoCache) 
    webview.resize(br.width(), br.height()) 

    scene.addItem(webview) 
    view.resize(br.width()+10, br.height()+10) 
    view.show() 
    sys.exit(app.exec_()) 

(스크립트 및 기타 물건).

보시다시피, 나는 내 svg의 크기를 얻는 다른 방법을 모르기 때문에 으로 내 svg를로드했습니다.

2

나는 길을 알아 냈다. 그러나 나는 그것이 최선의 방법이라고 생각하지 않는다. 두 파일이 있습니다. white.svg green.svg

호버 기능에 나는 이미지를 렌더링하고 보여줍니다. 자기가 지금이 개 .svg 파일을 가지고 있기 때문에 나는이 방법을 좋아하지 않는 QGraphicsSvgItem

입니다

def hoverEnterEvent(self, event): 
    self.render.load('green.svg') 
    self.show() 

def hoverLeaveEvent(self, event): 
    self.render.load('white.svg') 
    self.show() 

하나의 insted. 누구든지 더 나은 해결책을 가지고 있다면, 나는 제안에 개방적이다.