0

私が理解from module import *している限りでは、モジュールのすべてがローカルで利用可能になることを意味します。

私のコードで見つけた:

from tkinter import *

from tkinter import filedialog

振り返ってみると、この最後の行を削除できると考えましたが、使用できません。

NameError: name 'filedialog' is not defined.

私は何が欠けていますか?

4

1 に答える 1

1

私が理解していることから、Tkinter はパッケージです (つまり、他のモジュールが含まれています)。From Tkinter import * は、デフォルトのモジュールのみを提供します。

ドキュメントから:

6.4.1. インポート * パッケージから

ユーザーが sound.effects import * から書き込むとどうなりますか? 理想的には、これが何らかの形でファイルシステムに送信され、パッケージに存在するサブモジュールを見つけて、それらすべてをインポートすることを期待するでしょう。これには長い時間がかかる可能性があり、サブモジュールをインポートすると、サブモジュールが明示的にインポートされた場合にのみ発生する望ましくない副作用が発生する可能性があります。

唯一の解決策は、パッケージの作成者がパッケージの明示的なインデックスを提供することです。import ステートメントは次の規則を使用します: パッケージのinit .py コードがallという名前のリストを定義する場合、 from package import * が検出されたときにインポートする必要があるモジュール名のリストと見なされます。パッケージの新しいバージョンがリリースされたときに、このリストを最新の状態に保つのは、パッケージの作成者の責任です。パッケージの作成者は、パッケージから * をインポートする用途が見当たらない場合、サポートしないことを決定することもあります。たとえば、ファイル sound/effects/ init .py に次のコードを含めることができます。

あなたの質問に対する別の回答については、次の投稿をお読みください。 filedialog、tkinter、およびファイルを開く

于 2013-08-14T16:17:07.307 に答える