teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

補足

2018/03/08 07:11

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -15,17 +15,23 @@
15
15
  ```
16
16
 
17
17
  これは`スタックトレース`といい実行時エラーが発生した時点でのプログラムの呼び出しツリー情報を表示しています。
18
+
18
- 今回の場合では`frame = F(container, self)`ソースコードのこの行でエラーが発生した事を表しています。
19
+ 今回の場合、ソースコードの`frame = F(container, self)`この行でエラーが発生した事を表しています。
19
20
  `Widget.__init__(self, master, 'frame', cnf, {}, extra)`
20
21
  は`Widget.__init__`関数はコンストラクタ(※1)クラスの初期化時にエラーが発生した事を表しています。
22
+ ※1 正確には違いますが便宜上このように表記します。
21
23
 
24
+ 質問文のプログラムは`StartPage`、`InputNamePage`、`OptionSelectPage`の3つのクラスの生成を行っているので、どのクラスでエラーが発生したのかを特定します。
25
+ それは `WordPracticeApp#__init__`関数の`pages` 変数の各値をコメントアウトして実行すれば分かります。
22
26
 
23
- 質問文のプログラムは3つの生成処理を`StartPage`、`InputNamePage``OptionSelectPage`の3つのクラスの生成を行っているの、まず、どクラスでエラーが発生したのを特定します。
27
+ コメントアウトして実行すると、`InputNamePage``OptionSelectPage`の2つのクラスの生成処理質問文のエラーが発生することが分ます。
24
- それは `WordPracticeApp#__init__`関数のの`pages` 変数の各値をコメントアウトして実行すれば分かります。
25
28
 
29
+ ではクラスのどの部分まで正しく実行できているのかを確認するために、
26
- コメントアウトして実行すると、`InputNamePage`と`OptionSelectPage`2つのクラスの生成置いてエラーが発生することが分かります。
30
+ `InputNamePageの__init__`関数その行まで実行したかどうかを確認するprint文を追加します。
27
31
 
32
+ そうすると、追加したprint文が表示されない事から「`__init__`関数が呼び出されていない」事が分かります。
33
+
28
- では一体2つのクラスのどこが問題なのかそれはこの関数定義です。
34
+ では一体2つのクラスのどこが問題なのかそれはこの`__init__`の関数定義です。
29
35
  先頭のアンダーラインが1個抜けています。
30
36
 
31
37
  ```txt
@@ -36,18 +42,27 @@
36
42
  def __init__(self, parent, controller):
37
43
  ```
38
44
 
45
+ ■長くなったので結論
46
+ - 原因
47
+ `__init__`関数のスペルミスにより`tk.Frame.__init__(self, parent)`の呼び出しが行われず質問文表記のエラーが発生した。
48
+ - 対策方法
49
+ スペルミスを治す。
50
+
39
51
  このスペルミス以外にも2点スペルミスがあります。
40
- 1,`StartPage`クラスの__init__関数の引数controller
52
+ 1,`StartPage`クラスの`__init__`関数の引数`contoroller` → `controller`
41
- 2,質問文のソースコード最終行の`app.mainloop()`これは`application.mainloop()`です。
53
+ 2,質問文のソースコード最終行の`app.mainloop()``application.mainloop()`
42
54
 
43
- よって質問文のプログラムは合計4箇所のスペルミスが発生しています。
55
+ よって合計4箇所のスペルミスがあります。
44
56
 
45
- IDE使っていないなら導入検討をしてください
57
+ プログラム修正した時は、似たよう問題を発生させなために修正すると共に1個以上のこの問題が発生しいため何かをしてください。
46
- IDEを導入しているなら赤文字でエラーメッセージがでます。
47
58
 
48
- IDE[PyCharm Community Edition](https://www.jetbrains.com/pycharm/download/)がおすすめです。
59
+ 今回、私がオススメするのIDEの導入の検討とSoftware Debugging Class Onlineについてです。
49
60
 
61
+ [IDE](https://ja.wikipedia.org/wiki/%E7%B5%B1%E5%90%88%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83)を使っていないなら導入の検討をしてくださいな。
50
- ■少宣伝
62
+ IDEを導入ているなら赤文字で警告のメッセージがでます。
63
+
64
+ IDEはPython言語なら[PyCharm Community Edition](https://www.jetbrains.com/pycharm/download/)がおすすめです。
65
+
51
66
  科学的なデバック方法については
52
67
  udacityの無料コースの[Software Debugging Class Online](https://www.udacity.com/course/software-debugging--cs259)が考え方として纏まっているのでかなりおすすめです。
53
68
 

3

追記

2018/03/08 07:11

投稿

umyu
umyu

スコア5846

answer CHANGED
File without changes

2

追記

2018/03/07 23:51

投稿

umyu
umyu

スコア5846

answer CHANGED
File without changes

1

追記

2018/03/07 23:51

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -14,18 +14,19 @@
14
14
 
15
15
  ```
16
16
 
17
- これはスタックトレースといいます。
17
+ これは`スタックトレース`といい実行時エラーが発生した時点でのプログラムの呼び出しツリー情報を表示しています。
18
- エラーが発生したまでの呼び出し箇所を例示し、今回の場合ではframe = F(container, self)ソースコードのこの行でエラーが発生した事を表しています。
18
+ 今回の場合では`frame = F(container, self)`ソースコードのこの行でエラーが発生した事を表しています。
19
- Widget.__init__(self, master, 'frame', cnf, {}, extra)
19
+ `Widget.__init__(self, master, 'frame', cnf, {}, extra)`
20
- はWidget.__init__関数はコンストラクタ(※1)クラスの初期化時にエラーが発生した事を表しています。
20
+ `Widget.__init__`関数はコンストラクタ(※1)クラスの初期化時にエラーが発生した事を表しています。
21
21
 
22
22
 
23
- 質問文のプログラムは3つの生成処理をStartPage、InputNamePage、OptionSelectPageの3つのクラスの生成を行っているので、まず、どのクラスでエラーが発生したのかを特定します。
23
+ 質問文のプログラムは3つの生成処理を`StartPage``InputNamePage``OptionSelectPage`の3つのクラスの生成を行っているので、まず、どのクラスでエラーが発生したのかを特定します。
24
- それは WordPracticeApp#__init__関数ののpages 変数の各値をコメントアウトして実行すれば分かります。
24
+ それは `WordPracticeApp#__init__`関数のの`pages` 変数の各値をコメントアウトして実行すれば分かります。
25
25
 
26
- コメントアウトして実行すると、InputNamePageとOptionSelectPageの2つのクラスの生成に置いてエラーが発生することが分かります。
26
+ コメントアウトして実行すると、`InputNamePage``OptionSelectPage`の2つのクラスの生成に置いてエラーが発生することが分かります。
27
27
 
28
- では一体どこでエラー発生したのかそれはこの関数定義です、先頭のアンダーラインが1個抜けています
28
+ では一体2つのクラスのどこが問題なのかそれはこの関数定義です。
29
+ 先頭のアンダーラインが1個抜けています。
29
30
 
30
31
  ```txt
31
32
  def _init__(self, parent, controller):
@@ -36,10 +37,10 @@
36
37
  ```
37
38
 
38
39
  このスペルミス以外にも2点スペルミスがあります。
39
- 1,StartPageの__init__関数のcontroller
40
+ 1,`StartPage`クラスの__init__関数の引数controller
40
- 2,質問文のソースコード最終行のapp.mainloop()これはapplication.mainloop()です。
41
+ 2,質問文のソースコード最終行の`app.mainloop()`これは`application.mainloop()`です。
41
42
 
42
- よってのプログラム内で合計4箇所のスペルミスが発生しています。
43
+ よって質問文のプログラム合計4箇所のスペルミスが発生しています。
43
44
 
44
45
  IDEを使っていないなら導入の検討をしてくださいな。
45
46
  IDEを導入しているなら赤文字でエラーメッセージがでます。
@@ -48,4 +49,7 @@
48
49
 
49
50
  ■少し宣伝
50
51
  科学的なデバック方法については
51
- udacityの無料コースの[Software Debugging Class Online](https://www.udacity.com/course/software-debugging--cs259)が考え方として纏まっているのでかなりおすすめです。
52
+ udacityの無料コースの[Software Debugging Class Online](https://www.udacity.com/course/software-debugging--cs259)が考え方として纏まっているのでかなりおすすめです。
53
+
54
+ ■余談
55
+ 質問文は追記する形にしてくださいな。