2012-06-17 3 views
2

QSvgWidget을 사용하여 내장 된 svg 파일을 렌더링하려고합니다. 내 파일 "front.svg"는 다음과 같습니다 PySide - QSvgWidget이 포함 된 SVG 파일을 잘못 렌더링합니다.

<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="500" height="500" id="svgfile"> 
<rect style="fill:#ff0000;" id="rect1" width="150" height="200"/> 

<svg x="100" y="100"> 
    <rect style="fill:#00ff00;" id="rect2" width="200" height="120"/> 
</svg> 
</svg> 

이 파일은 크롬, 또는 잉크 스케이프에서 확실히 정상 보이지만, svgwidget에 이상한 보인다. 녹색 직사각형 만 보이고 빨간색은 매우 작고 녹색 뒤에 숨어 있습니다. 여기 내 파이썬 코드 :

import sys 
from PySide.QtGui import QApplication 
from PySide.QtSvg import QSvgWidget 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 

    widget = QSvgWidget('front.svg') 
    widget.show() 

    sys.exit(app.exec_()) 

아무도 내가 뭘 잘못 여부를 알고 있는가, 아니면 PySide에 약간의 버그?

+0

이것은 임베디드 시스템 프로그래밍에 관한 것이 아닙니다. Regag –

답변

2

이 문제에 대한 해결 방법이 있습니다. 이제 QSvgWidget 대신 QGraphicsWebView를 사용하고 있습니다. 여기 내 파이썬 코드 (SVG 파일이 변경되지 않습니다) : 그것은 QT이 위젯을 제대로 SVG 파일을 렌더링하는, 이상한, 그리고 완전히 잘못 (나는 또한 "텍스트"요소에 대한 문제가 있었다) 전용 위젯을 사용하여

import sys 
from PySide.QtGui import QApplication, QGraphicsScene, QGraphicsView 
from PySide.QtWebKit import QGraphicsWebView 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 

    item = QGraphicsWebView() 
    item.load('front.svg') 
    view = QGraphicsView() 
    scene = QGraphicsScene() 
    scene.addItem(item) 
    view.setScene(scene) 
    view.show() 
    sys.exit(app.exec_()) 

. 하지만 이제 모든 것이 잘됩니다.

2

당신은 여분의 내부 <svg> 태그를 제거하고, X를 이동하여 올바르게 렌더링 얻을 수 y는 <rect> 요소에 속성 :이 특정 사건을 테스트 할 수있는 인위적인 예를 들어 가정

<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="500" height="500" id="svgfile"> 
<rect style="fill:#ff0000;" id="rect1" width="150" height="200"/> 
<rect style="fill:#00ff00;" id="rect2" x="100" y="100" width="200" height="120"/> 
</svg> 

그래도? 중첩 된 <svg> 요소가 필요한 이유가 있습니까? 당신이 의도 한대로 나를 위해

+0

예, 이유가 있습니다. 왜 중첩 된 SVG 요소가 필요한지. 로고가있는 외부 파일을 내 파일에 T 셔츠로로드하려고합니다. svg 요소의 모든 속성을 "변환"하는 것은 어렵습니다. 또한 svg 요소를 g 요소로 대체하려고 시도했지만 다시 한번 "viewBox"와 같은 모든 특성을 올바르게 변환하는 것이 어렵습니다. 또한이 로고 파일에 추가 네임 스페이스가 있으면 이름 공간에서 어떤 일이 발생할지 모릅니다. – damian

2

, 은 잉크 스케이프은 SVG 파일을 렌더링,하지만 난 당신과 같은 관찰 PyQt4에 추가, 포함 된 개체에 의해 만들어지는 그룹 개체에 문제가있다. 따라서 PySide보다는 SVG 구조에 문제가 있음을 확신합니다. 도움이되기를 바랍니다.

관련 문제