回答編集履歴

4

補足

2018/03/08 07:11

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -32,27 +32,39 @@
32
32
 
33
33
  これは`スタックトレース`といい実行時エラーが発生した時点でのプログラムの呼び出しツリー情報を表示しています。
34
34
 
35
+
36
+
35
- 今回の場合では`frame = F(container, self)`ソースコードのこの行でエラーが発生した事を表しています。
37
+ 今回の場合、ソースコードの`frame = F(container, self)`この行でエラーが発生した事を表しています。
36
38
 
37
39
  `Widget.__init__(self, master, 'frame', cnf, {}, extra)`
38
40
 
39
41
  は`Widget.__init__`関数はコンストラクタ(※1)クラスの初期化時にエラーが発生した事を表しています。
40
42
 
43
+ ※1 正確には違いますが便宜上このように表記します。
41
44
 
42
45
 
43
46
 
47
+ 質問文のプログラムは`StartPage`、`InputNamePage`、`OptionSelectPage`の3つのクラスの生成を行っているので、どのクラスでエラーが発生したのかを特定します。
44
48
 
45
- 質問文のプログラムは3つの生成処理を`StartPage`、`InputNamePage`、`OptionSelectPage`の3つのクラスの生成を行っているので、まず、どのクラスでエラーが発生したのかを特定します。
46
-
47
- それは `WordPracticeApp#__init__`関数の`pages` 変数の各値をコメントアウトして実行すれば分かります。
49
+ それは `WordPracticeApp#__init__`関数の`pages` 変数の各値をコメントアウトして実行すれば分かります。
48
50
 
49
51
 
50
52
 
51
- コメントアウトして実行すると、`InputNamePage`と`OptionSelectPage`の2つのクラスの生成に置いてエラーが発生することが分かります。
53
+ コメントアウトして実行すると、`InputNamePage`と`OptionSelectPage`の2つのクラスの生成処理で質問文のエラーが発生することが分かります。
52
54
 
53
55
 
54
56
 
57
+ ではクラスのどの部分まで正しく実行できているのかを確認するために、
58
+
59
+ `InputNamePageの__init__`関数にその行まで実行したかどうかを確認するprint文を追加します。
60
+
61
+
62
+
63
+ そうすると、追加したprint文が表示されない事から「`__init__`関数が呼び出されていない」事が分かります。
64
+
65
+
66
+
55
- では一体2つのクラスのどこが問題なのかそれはこの関数定義です。
67
+ では一体2つのクラスのどこが問題なのかそれはこの`__init__`の関数定義です。
56
68
 
57
69
  先頭のアンダーラインが1個抜けています。
58
70
 
@@ -74,29 +86,47 @@
74
86
 
75
87
 
76
88
 
77
- スペルミス以外にも2点スペルミスがあります。
89
+ ■長くなったで結論
78
90
 
79
- 1,`StartPage`クラスの__init__関数の引数controller
91
+ - 原因
80
92
 
81
- 2,質問文のソースコード最終行の`app.mainloop()`これは`application.mainloop()`です
93
+ `__init__`関数のスペルミスにより`tk.Frame.__init__(self, parent)`の呼び出しが行われず質問文表記のエラーが発生した
94
+
95
+ - 対策方法
96
+
97
+ スペルミスを治す。
82
98
 
83
99
 
84
100
 
85
- よって質問文プログラムは合計4箇所のスペルミスが発生しています。
101
+ のスペルミス以外にも2点スペルミスあります。
102
+
103
+ 1,`StartPage`クラスの`__init__`関数の引数`contoroller` → `controller`
104
+
105
+ 2,質問文のソースコード最終行の`app.mainloop()` → `application.mainloop()`
86
106
 
87
107
 
88
108
 
89
- IDEを使っていないなら導入検討をしてくださいな
109
+ って合計4箇所スペルミスがあります
90
-
91
- IDEを導入しているなら赤文字でエラーメッセージがでます。
92
110
 
93
111
 
94
112
 
95
- IDE[PyCharm Community Edition](https://www.jetbrains.com/pycharm/download/)おすすです
113
+ プログラムを修正した時、似たような問題を発生させないために修正すると共に1個以上のこの問題発生しないたの何かをしてください
96
114
 
97
115
 
98
116
 
117
+ 今回、私がオススメするのはIDEの導入の検討とSoftware Debugging Class Onlineについてです。
118
+
119
+
120
+
121
+ [IDE](https://ja.wikipedia.org/wiki/%E7%B5%B1%E5%90%88%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83)を使っていないなら導入の検討をしてくださいな。
122
+
99
- ■少宣伝
123
+ IDEを導入ているなら赤文字で警告のメッセージがでます。
124
+
125
+
126
+
127
+ IDEはPython言語なら[PyCharm Community Edition](https://www.jetbrains.com/pycharm/download/)がおすすめです。
128
+
129
+
100
130
 
101
131
  科学的なデバック方法については
102
132
 

3

追記

2018/03/08 07:11

投稿

umyu
umyu

スコア5846

test CHANGED
File without changes

2

追記

2018/03/07 23:51

投稿

umyu
umyu

スコア5846

test CHANGED
File without changes

1

追記

2018/03/07 23:51

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -30,29 +30,31 @@
30
30
 
31
31
 
32
32
 
33
- これはスタックトレースといいます。
33
+ これは`スタックトレース`といい実行時エラーが発生した時点でのプログラムの呼び出しツリー情報を表示しています。
34
34
 
35
- エラーが発生したまでの呼び出し箇所を例示し、今回の場合ではframe = F(container, self)ソースコードのこの行でエラーが発生した事を表しています。
35
+ 今回の場合では`frame = F(container, self)`ソースコードのこの行でエラーが発生した事を表しています。
36
36
 
37
- Widget.__init__(self, master, 'frame', cnf, {}, extra)
37
+ `Widget.__init__(self, master, 'frame', cnf, {}, extra)`
38
38
 
39
- はWidget.__init__関数はコンストラクタ(※1)クラスの初期化時にエラーが発生した事を表しています。
39
+ `Widget.__init__`関数はコンストラクタ(※1)クラスの初期化時にエラーが発生した事を表しています。
40
40
 
41
41
 
42
42
 
43
43
 
44
44
 
45
- 質問文のプログラムは3つの生成処理をStartPage、InputNamePage、OptionSelectPageの3つのクラスの生成を行っているので、まず、どのクラスでエラーが発生したのかを特定します。
45
+ 質問文のプログラムは3つの生成処理を`StartPage``InputNamePage``OptionSelectPage`の3つのクラスの生成を行っているので、まず、どのクラスでエラーが発生したのかを特定します。
46
46
 
47
- それは WordPracticeApp#__init__関数ののpages 変数の各値をコメントアウトして実行すれば分かります。
47
+ それは `WordPracticeApp#__init__`関数のの`pages` 変数の各値をコメントアウトして実行すれば分かります。
48
48
 
49
49
 
50
50
 
51
- コメントアウトして実行すると、InputNamePageとOptionSelectPageの2つのクラスの生成に置いてエラーが発生することが分かります。
51
+ コメントアウトして実行すると、`InputNamePage``OptionSelectPage`の2つのクラスの生成に置いてエラーが発生することが分かります。
52
52
 
53
53
 
54
54
 
55
- では一体どこでエラー発生したのかそれはこの関数定義です、先頭のアンダーラインが1個抜けています
55
+ では一体2つのクラスのどこが問題なのかそれはこの関数定義です。
56
+
57
+ 先頭のアンダーラインが1個抜けています。
56
58
 
57
59
 
58
60
 
@@ -74,13 +76,13 @@
74
76
 
75
77
  このスペルミス以外にも2点スペルミスがあります。
76
78
 
77
- 1,StartPageの__init__関数のcontroller
79
+ 1,`StartPage`クラスの__init__関数の引数controller
78
80
 
79
- 2,質問文のソースコード最終行のapp.mainloop()これはapplication.mainloop()です。
81
+ 2,質問文のソースコード最終行の`app.mainloop()`これは`application.mainloop()`です。
80
82
 
81
83
 
82
84
 
83
- よってのプログラム内で合計4箇所のスペルミスが発生しています。
85
+ よって質問文のプログラム合計4箇所のスペルミスが発生しています。
84
86
 
85
87
 
86
88
 
@@ -99,3 +101,9 @@
99
101
  科学的なデバック方法については
100
102
 
101
103
  udacityの無料コースの[Software Debugging Class Online](https://www.udacity.com/course/software-debugging--cs259)が考え方として纏まっているのでかなりおすすめです。
104
+
105
+
106
+
107
+ ■余談
108
+
109
+ 質問文は追記する形にしてくださいな。