回答編集履歴
4
些細
test
CHANGED
@@ -22,11 +22,11 @@
|
|
22
22
|
```
|
23
23
|
というコードをイディオムとして覚えてしまっているのかもしれませんが、ここでチェックしているのは上記の動作です。
|
24
24
|
`pyhton Main_GUI.py`と実行された時は自身のモジュールの名前は`__main__`になっています。
|
25
|
-
Pythonコード中で`import Main_GUI`と実行された時は自身のモジュールの名前は`Main_GUI`になっています。
|
25
|
+
Pythonコード中で`import Main_GUI`と実行されてロードされた時は自身のモジュールの名前は`Main_GUI`になっています。
|
26
26
|
それをif文でチェックしているのです。
|
27
27
|
|
28
28
|
**だから**`pyhton Main_GUI.py`と実行された時、main_1が実行され、window.initUIが実行され、その中でグローバル変数ggが作られるのです。
|
29
|
-
そのグローバル変数gg
|
29
|
+
そのグローバル変数ggを他からインポートするには
|
30
30
|
```python
|
31
31
|
from __main__ import gg
|
32
32
|
```
|
3
説明
test
CHANGED
@@ -7,4 +7,58 @@
|
|
7
7
|
```
|
8
8
|
from __main__ import gg
|
9
9
|
```
|
10
|
+
|
11
|
+
|
12
|
+
----
|
13
|
+
追記
|
14
|
+
|
15
|
+
```
|
16
|
+
pyhton Main_GUI.py
|
17
|
+
```
|
10
|
-
https://docs.python.org/ja/3.9/library/__main__.html
|
18
|
+
として実行した場合、Main_GUI.py がロードされてできたモジュールには、 `Main_GUI` という名前ではなく、`__main__`という名前が付けられています。 > https://docs.python.org/ja/3.9/library/__main__.html
|
19
|
+
|
20
|
+
```python
|
21
|
+
if __name__ == '__main__':
|
22
|
+
```
|
23
|
+
というコードをイディオムとして覚えてしまっているのかもしれませんが、ここでチェックしているのは上記の動作です。
|
24
|
+
`pyhton Main_GUI.py`と実行された時は自身のモジュールの名前は`__main__`になっています。
|
25
|
+
Pythonコード中で`import Main_GUI`と実行された時は自身のモジュールの名前は`Main_GUI`になっています。
|
26
|
+
それをif文でチェックしているのです。
|
27
|
+
|
28
|
+
**だから**`pyhton Main_GUI.py`と実行された時、main_1が実行され、window.initUIが実行され、その中でグローバル変数ggが作られるのです。
|
29
|
+
そのグローバル変数ggがを他からインポートするには
|
30
|
+
```python
|
31
|
+
from __main__ import gg
|
32
|
+
```
|
33
|
+
とする必要があります。
|
34
|
+
|
35
|
+
Pythonコマンドの引数に指定した実行ファイルを、他の場所で
|
36
|
+
```python
|
37
|
+
from Main_GUI import gg
|
38
|
+
```
|
39
|
+
のようにファイル名でインポートしてしまうと、`__main__`としてロードされているものとは**別の**(Main_GUIという名前の)モジュールができてしまいます。
|
40
|
+
そこにはggというグローバル変数は**ない**のでエラーになります。
|
41
|
+
|
42
|
+
----
|
43
|
+
|
44
|
+
import 文はそれが実行された場所の名前空間に名前を束縛します。
|
45
|
+
関数実行中、関数内でimport文を書いたら、その文が作る変数はローカル変数になります。
|
46
|
+
|
47
|
+
グローバルなところで
|
48
|
+
|
49
|
+
```Main_GUI.py
|
50
|
+
import sub
|
51
|
+
```
|
52
|
+
|
53
|
+
```sub.py
|
54
|
+
from __main__ import gg
|
55
|
+
```
|
56
|
+
と書くと循環インポートになります。今回のケースはこれはうまくいきません。
|
57
|
+
関数内部でローカルインポートするのが、うまく動かす方法です。その点では、もとのコードのインポート位置はよいと思います。(ggが`__init__`の中のローカル変数になっていますが、それが質問者さんの意図通りなのかは推し量ることは出来ませんが)
|
58
|
+
|
59
|
+
|
60
|
+
一般にはグローバルな箇所での循環インポートは、動くかどうかがインポートする順番に左右されることが多いので、パッケージ-サブパッケージ間の循環インポート以外には書くべきではないです。
|
61
|
+
|
62
|
+
----
|
63
|
+
|
64
|
+
これはこれとしてy_waiwai さんの解答の方が正答です。
|
2
編集
test
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
意図しているのは多分こう。
|
2
2
|
```
|
3
|
+
sys.path.append("Main_GUI ")
|
3
4
|
from Main_GUI import gg
|
5
|
+
```
|
4
6
|
↓
|
7
|
+
```
|
5
8
|
from __main__ import gg
|
6
9
|
```
|
7
10
|
https://docs.python.org/ja/3.9/library/__main__.html
|
1
途中
test
CHANGED
@@ -4,4 +4,4 @@
|
|
4
4
|
↓
|
5
5
|
from __main__ import gg
|
6
6
|
```
|
7
|
-
https://docs.python.org/ja/3.9/library/__main__.html
|
7
|
+
https://docs.python.org/ja/3.9/library/__main__.html
|