2012-05-22 5 views
0

내 프로젝트에 PyTide를 Qt GUI 용으로 사용하는 이상한 버그가 있습니다. 응답에서 환경을 설정하는 간단한 코드로 테스트하려고합니다. 내 쉘 (python test.py)에서, 그것은 완벽하게 작동 시작하면 https://stackoverflow.com/a/6906552/130164PySide Qt 스크립트가 Spyder에서 시작하지는 않지만 쉘에서 작동합니다.

: 여기

내가 함께 테스트입니다 코드입니다. 내가 스파이더에서 해당 스크립트를 실행할 때, 나는 다음과 같은 오류 얻을 :

/usr/lib/pymodules/python2.6/matplotlib/__init__.py:835: UserWarning: This call to matplotlib.use() has no effect 
because the the backend has already been chosen; 
matplotlib.use() must be called *before* pylab, matplotlib.pyplot, 
or matplotlib.backends is imported for the first time. 

가 왜 코드가 작동에서 시작 않습니다 도움이된다면

Traceback (most recent call last): 
    File "/home/test/Desktop/test/test.py", line 31, in <module> 
    app = QtGui.QApplication(sys.argv) 
RuntimeError: A QApplication instance already exists. 

을, 또한 다음과 같은 경고를 얻을 수 Spyder가 아닌 내 셸?


는 업데이트 : 마타 스파이더 말이 Qt는을 사용하기 때문에 문제가 발생하는 것으로 대답했다. 지금은 Spyder에서 "외부 시스템 터미널에서 실행"옵션을 사용하여 실행을 설정했습니다.이 옵션은 오류는 발생시키지 않지만 디버깅을 허용하지 않습니다. Spyder에 기본 제공 해결 방법이 있습니까?

답변

2

SpyderQt 응용 프로그램이므로 자신의 QApplication이 시작됩니다. 동일한 프로세스에서 하나만 QApplication 존재할 수 있습니다, 그래서 당신은 첫 번째 오류가 발생합니다.

Sypdermatplotlib을 사용합니다. 따라서 언급 한 모듈 중 일부를 이미 가져온 것이므로 두 번째 오류가 발생합니다.

그래서 우리가 그것을 좋아할 때 자신의 QApplication을 만들거나 matplotlib.use()으로 전화를 걸 수 없습니다. 또는이 전화를 try/except에 포장하면 작동합니다.

+0

그게 내가 겪고있는 문제입니다. Spyder에 해결 방법이 있는지 알고 있습니까? 지금은 Spyder에서 "외부 시스템 터미널에서 실행"옵션을 사용하여 실행을 설정했습니다.이 옵션은 오류는 발생시키지 않지만 디버깅을 허용하지 않습니다. 아마 Spyder는 이것에 약간의 해결 방법을 가지고 있습니까? –

+0

나는 스파이더를 잘 모르기 때문에 오류를 잡는 것 외에 나는 전혀 모른다. – mata

+1

Spyder가 Qt 애플리케이션 인스턴스에서 실행되고 있지만 모든 Python 콘솔 인스턴스는 자체 프로세스에서 실행된다는 것은 사실입니다. – Jed

2

나는 같은 문제가 있으며, 어딘가 stackoverflow에 대한 해결책이었다.

대신

qApp = QtGui.QApplication(sys.argv) 

의 사용

qApp = QtGui.QApplication.instance() 
if qApp is None: 
     qApp = QtGui.QApplication(sys.argv) 
+1

동일한 문제가 있지만 기능 테스트 (Qttest 및 unittest 사용)를 사용하면 솔루션으로 문제가 해결됩니다. 감사. – gunzapper

1
당신이 콘솔이 특별히 여러 과학 라이브러리를 가져올 구성되어 있기 때문에 대화 형 콘솔에 응용 프로그램을 실행하려고하면 그것은 스파이더에서 작동하지 않습니다

, 자동으로 show() matplotlib 수치 및 몇 가지 다른 세부 사항. 자세한 내용은 Spyder 콘솔 프롬프트에서 scientific을 입력하십시오. 결과적으로 Qt 애플리케이션 이벤트 루프가 이미 실행되고 있습니다.

는 응용 프로그램이 스파이더의 내부 실행하는 데 활용하려면 다음
  1. 확실히 스파이더가 PyQt는을 PySide 외부 콘솔을 열고하지 않도록 구성되어 있는지 확인합니다. 이것은 도구> 환경 설정> 콘솔> 외부 모듈> Qt-Python 바인딩 라이브러리 선택에서 설정할 수 있습니다.
  2. 편집기에서 스크립트가 활성화 된 상태에서 F6을 눌러 실행 설정 대화 상자를 엽니 다.현재 대화식 인터프리터에서 실행하는 대신 "새로운 전용 파이썬 인터프리터에서 실행"라디오 버튼을 선택하십시오. OK을 클릭하십시오. 이제 F5을 눌러 스크립트를 실행하십시오. Ctrl+F5을 눌러 스크립트를 디버그하십시오.
+0

이것은 나를 위해 일했습니다. – neuronet

관련 문제