2015-02-06 5 views
3

저는 매우 혼란스럽고 혼란 스럽습니다. 나는 tkinter로 간단한 스크립트를 시도했지만 IDLE에서 제대로 작동하지만 CMD에서 실행하려고하면 tkinter 창이 열리고 잘 보입니다.하지만 버튼이나 파일 메뉴 옵션을 클릭하면 AttributeError가 발생합니다 :CMD에서 실행할 때 스크립트가 AttributeError와 함께 실패하지만 IDLE에서 정상적으로 실행됩니다.

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python33\lib\tkinter\__init__.py", line 1489, in __call__ 
return self.func(*args) 
    File "060214_Manual_Evaluation_of_Protein-protein_Cross-Links.py", line 13, in Open_csv 
    self.CsvPath = tk.filedialog.askopenfilename() 
    AttributeError: 'module' object has no attribute 'filedialog' 

IDLE과 CMD의 차이점에 대해 더 많은 정보를 얻을 수있는 정보가 있거나 도움이 되었기 때문에 감사드립니다.

+0

사용중인 파이썬 버전 확인 ... Cmd는 Py2 및 IDLE Py3을 사용하는 것으로 보입니다. 먼저 버전을 확인하십시오. –

+0

답변 해 주셔서 감사합니다. 버전은 동일합니다. 확인했습니다. – Alex

+0

아래 답변을 한 후 IDLE이 버그를 숨겨서 Python에서 직접 코드를 실행하자마자 볼 수있는 버그라고 판단했습니다. 수정 사항은 3.5.3에 있으며 현재 3.6.0 릴리스에 있습니다. 이 수정으로'import tkinter; tkinter.filedialog'는 콘솔에서 실행될 때와 마찬가지로 IDLE에서 실행될 때 실패합니다. –

답변

4

2.x에서 tk.filedialog의 철자가 다르기 때문에 사람들이 python 버전에 대해 묻습니다. 그러나 유감스럽게도 tkinter.filedialog를 제대로 가져 오지 않은 게시되지 않은 코드의 버그를 숨기는 관리 환경에서 Idle이 코드를 실행한다는 것이 문제가 아닌지 의심 스럽습니다. 예를 들어, 다음은 표준 3.4.2 콘솔 인터프리터에서 온 것입니다.

>>> import tkinter as tk 
>>> tk.filedialog 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'filedialog' 

다음은 Idle 's Shell에서 사용 된 것과 같습니다. 유휴 이미 (sys.modules에에) tkinter.filedialog로의 FileDialog 서브 모듈을 수입했기 때문에

>>> import tkinter as tk 
>>> tk.filedialog 
<module 'tkinter.filedialog' from 'C:\\Programs\\Python34\\lib\\tkinter\\filedialog.py'> 

오류가 없다는 이유

입니다. 이것도 문제가된다면, 아래의 import를 추가하고 'tk'접두사없이 'filedialog'를 참조하십시오.

>>> from tkinter import filedialog 
>>> filedialog 
<module 'tkinter.filedialog' from 'C:\\Programs\\Python34\\lib\\tkinter\\filedia 
log.py'> 
>>> filedialog.askopenfilename 
<function askopenfilename at 0x0000000000498BF8> 

는이 문제가 해결되지 않을 경우, 귀하의 질문에 정말 최소한의 코드 예제를 추가, 편집 및 당신이 모두를 실행하는 방법을 정확하게 설명 유휴 및 'CMD'(윈도우, 또는 무엇에이 cmd.exe를인가?).

+0

대단히 감사합니다. 하위 모듈을 개별적으로 가져올 때 작동합니다. 나는 그것을 그것이하는 적당한 방법 이었다는 것을 몰랐다. – Alex

0

이것은 IDLE처럼 다른 PYTHONPATH를 설정하거나 다른 python 실행 파일을 사용합니다. 두 버전의 sys.version_info을 확인하고 sys.path을 비교하여 같은 버전의 Python을 사용해야합니다.

+0

답변 해 주셔서 감사합니다! 나는 그것을했고 유일한 차이점은 유휴 상태에서 나는 여분의 경로 ('C : \ Python33 \\ Lib \\ idlelib')를 얻는다는 것입니다. – Alex

+0

음, 그 경로에 흥미로운 것이 포함되어 있습니까? 두 python은'sys.version_info'에 따르면 python3.3입니까? –

+0

지금은 브라우징 중이지만 파이썬이 어떻게 작동하는지 간신히 이해할만큼 재미있는 것을 말할 수는 없습니다. 그렇습니다. 버전은 완전히 동일합니다. – Alex