2016-07-08 5 views
1

У меня есть программа Tkinter Python, уменьшенный вариант которой можно найти ниже:Tkinter NameError при запуске сценария из оболочки

from tkinter import * 
from tkinter.ttk import * 

filedialog.askopenfilename() 

Когда я запускаю этот скрипт из IDLE, я не получаю ошибки.

Однако, при запуске из PowerShell, используя python myscript.py я получаю

NameError: could not find name 'filedialog' 

Windows 10 x64 на середину 2012 MacBook Pro

+0

Мой ответ здесь: https://stackoverflow.com/questions/38806673/importing-from-a-package-in-idle-vs-shell/38808437#38808437 описано, как исправить существующие релизы IDLE, чтобы они соответствовали ошибка. –

+0

@TerryJanReedy Спасибо за исправление этого! Очень признателен! – JPeroutek

ответ

1

IDLE, вероятно, импортировать его уже, но в целом, так как filedialog является tkinter модуля он не будет импортирован с голым:

from tkinter import * 

Включить дополнительный:

from tkinter import filedialog 

и вы должны быть добрым идти.

+0

Почему модуль filedialog не будет включен в *? – JPeroutek

+1

То же, что и 'ttk' (который вы уже включаете отдельно), это модуль. – Feneric

+1

Это известная ошибка IDLE в idlelib.run. https://bugs.python.org/issue25507 Решение во всех случаях заключается в добавлении недостающего импорта, как сказал Фенерик. Я надеюсь сделать необходимый рефакторинг до 3.6, но сначала должен добавить тесты, чтобы не вводить новые и, возможно, худшие ошибки. –

Смежные вопросы