2016-08-06 7 views
1

전체 패키지를 가져 오는 것은 IDLE에서 작동하지만 셸에서는 작동하지 않습니다. IDLE에서 미세 다음 작품 : 나는 쉘에서이 작품을 만들기 위해 import tkinter.filedialog에 있다고 이해IDLE 대 셸의 패키지에서 가져 오기

AttributeError: 'module' object has no attribute 'filedialog' 

: 쉘에서

import tkinter as tk 
tk.filedialog.askopenfilename() 

, 나는이 오류가 발생합니다.

IDLE과 셸의 차이점은 무엇입니까? IDLE이 쉘처럼 작동하도록하려면 어떻게해야합니까? IDLE에서 스크립트가 작동하고 쉘에서 실패하는 것은 실망 스러울 수 있습니다.

저는 Python 3.4를 사용하고 있습니다.

+0

글꼴 모듈을 사용하는 [Tkinter 코드는 명령 줄에서 실행할 수 없습니다?] (http://stackoverflow.com/questions/30877112/tkinter-code-using-font-module-cant-run-from- 명령 줄) –

+0

@ TerryJanReedy 예, 그 게시물은 비슷한 문제를 설명합니다. IDLE이 필요로하는 것에서 스크립트 환경을 격리하면 안됩니까? 또한 IDLE에'tkinter' 또는'tk'라고 입력하면'name 'tkinter'not defined' 또는'name 'tk'not defined'라고 쓰여지고, 다른 게시물에 설명이 있으면 정의해야합니다. 맞다. – mcu

+0

당신이 알아 낸 '이유'가 아니라 '해결 방법'을 묻기 때문에 닫기 요청을 철회했습니다. 나는 아래 답변했다. 그리고 예, 스크립트 환경 *은 최대한 격리되어야합니다. 이것이 별도의 프로세스에서 코드를 실행하는 이유입니다. IDLE 문서에는 3.2 절이 있습니다. IDLE - 불가 피한 일부 목록을 표시하는 콘솔 차이 *. 나는 아직도 sys.modules에있는 추가 모듈의 수를 최소한으로 줄이기 위해 노력하고있다. (https://bugs.python.org/issue27534). 현재 감소로 인해 run.py의 가져 오기 시간이 45 % 줄어 듭니다. –

답변

1

이것은 향후 3.5.3 및 3.6.0a4 릴리스에서 수정 된 IDLE 버그입니다. Tracker issue.

기존 3.5 또는 3.4 릴리스의 경우 LOCALHOST 행 바로 앞의 idlelib/run.py에 다음을 추가하십시오.

for mod in ('simpledialog', 'messagebox', 'font', 
      'dialog', 'filedialog', 'commondialog', 
      'colorchooser'): 
    delattr(tkinter, mod) 
    del sys.modules['tkinter.' + mod] 

이전의 3.x 릴리스에서는 작동하지만 테스트를 위해 설치하지 않았다고 가정합니다. 기존 3.6.0a_ 릴리스의 경우 'colorchooser'를 'ttk'로 바꿉니다.

+0

테리, IDLE을 유지해 주셔서 감사합니다. IDE가 프로그래밍 언어로 패키지화되어 있다는 생각을 정말 좋아합니다. 따라서 거의 작업하지 않는 컴퓨터에 쉽게 배포 할 수 있습니다. http://stackoverflow.com/questions/32551405/python-shell-high-cpu-usage에서 물어 본 CPU 사용량에 대한 솔루션을 찾은 적이 있습니까? 나는 여전히 그것을 유발하는 패턴이 무엇인지 알 수 없다. 항상 발생하지는 않는다. – mcu

+0

긍정적 인 피드백에 감사드립니다. –