回答編集履歴

8

追記

2018/04/21 19:01

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -8,17 +8,17 @@
8
8
 
9
9
  1-1, `__init__(self):` を追加しwhen_list,where_list の初期化はそちらで行うように
10
10
 
11
- 1-2. getXXX,setXXXは全部削除
11
+ 1-2. `getXXX`,`setXXX`は全部削除
12
-
12
+
13
- 1-3. buttonClickは5W1Hを生成してlist戻り値として返すだけに。(あと関数名を変更)
13
+ 1-3. `buttonClick`4WHDを生成してジェネレータを返すだけに。(あと関数名を変更)
14
-
14
+
15
- 1-4. random.randintではなくrandom.choiceを使用するように変更
15
+ 1-4. `random.randint`ではなく`random.choice`を使用するように変更
16
-
16
+
17
- 0. ttk.Frameを管理するクラスMyFrameを作成
17
+ 0. ttk.Frameを管理するクラス`MyFrame`を作成
18
-
18
+
19
- 0. 内部にWordのインスタンスを保持
19
+ 0. 内部に`Word`のインスタンスを保持
20
-
20
+
21
- 0. MyFrameにbuttonClick関数を新規に作成し、Wordクラスから(1)の処理の取得とLableの更新を行うように。
21
+ 0. `MyFrame``buttonClick`関数を新規に作成し、Wordクラスから(1)の処理の取得とLableの更新を行うように。
22
22
 
23
23
 
24
24
 
@@ -46,7 +46,7 @@
46
46
 
47
47
  self.where_list = ['東京', '埼玉']
48
48
 
49
- self.who_list = ['東京', '埼玉']
49
+ self.who_list = ['', 'あなた']
50
50
 
51
51
  self.with_who = ['東京', '埼玉']
52
52
 
@@ -56,11 +56,21 @@
56
56
 
57
57
 
58
58
 
59
- def get5W1H(self) -> list:
59
+ def get4WHD(self):
60
-
60
+
61
- return [choice(self.when_list), choice(self.where_list), choice(self.who_list)
61
+ yield choice(self.when_list)
62
-
62
+
63
- , choice(self.with_who),choice(self.how_list), choice(self.do_list)]
63
+ yield choice(self.where_list)
64
+
65
+ yield choice(self.who_list)
66
+
67
+ yield choice(self.with_who)
68
+
69
+ yield choice(self.how_list)
70
+
71
+ yield choice(self.do_list)
72
+
73
+
64
74
 
65
75
 
66
76
 
@@ -228,7 +238,7 @@
228
238
 
229
239
  def set_answer(self):
230
240
 
231
- for i, v in enumerate(self.word.get5W1H()):
241
+ for i, v in enumerate(self.word.get4WHD()):
232
242
 
233
243
  self.label_answer[i].configure(text=v)
234
244
 

7

追記

2018/04/21 19:01

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -46,11 +46,21 @@
46
46
 
47
47
  self.where_list = ['東京', '埼玉']
48
48
 
49
+ self.who_list = ['東京', '埼玉']
50
+
51
+ self.with_who = ['東京', '埼玉']
52
+
53
+ self.how_list = ['東京', '埼玉']
54
+
55
+ self.do_list = ['東京', '埼玉']
56
+
49
57
 
50
58
 
51
59
  def get5W1H(self) -> list:
52
60
 
53
- return [choice(self.when_list), choice(self.where_list)]
61
+ return [choice(self.when_list), choice(self.where_list), choice(self.who_list)
62
+
63
+ , choice(self.with_who),choice(self.how_list), choice(self.do_list)]
54
64
 
55
65
 
56
66
 
@@ -66,37 +76,167 @@
66
76
 
67
77
  self.word = Word()
68
78
 
79
+
80
+
81
+ # プログラムの題名みたいなのを描写する用ののラベル
82
+
83
+ self.label_title = ttk.Label(
84
+
85
+ root,
86
+
87
+ text="「 いつどこでだれがだれとどのようになにをした 」",
88
+
89
+ background=("#ffffff"),
90
+
91
+ padding=(50, 5)
92
+
93
+ )
94
+
95
+ self.label_title.grid(row=0, column=0, padx=10, pady=10, columnspan=6)
96
+
97
+
98
+
99
+ # 「いつ」という文字を表示するようのラベル
100
+
101
+ self.label_when = ttk.Label(
102
+
103
+ root,
104
+
105
+ text="いつ",
106
+
107
+ background=("#ffff00"),
108
+
109
+ padding=(50, 5)
110
+
111
+ )
112
+
113
+ self.label_when.grid(row=1, column=0, padx=10, pady=10)
114
+
115
+
116
+
117
+ # 「どこで」という文字を表示するようのラベル
118
+
119
+ self.label_where = ttk.Label(
120
+
121
+ root,
122
+
123
+ text="どこで",
124
+
125
+ background=("#1e90ff"),
126
+
127
+ padding=(50, 5)
128
+
129
+ )
130
+
131
+ self.label_where.grid(row=1, column=1, padx=10, pady=10)
132
+
133
+
134
+
135
+ # 「だれが」という文字を表示するようのラベル
136
+
137
+ self.label_who = ttk.Label(
138
+
139
+ root,
140
+
141
+ text="だれが",
142
+
143
+ background=("#adff2f"),
144
+
145
+ padding=(50, 5)
146
+
147
+ )
148
+
149
+ self.label_who.grid(row=1, column=2, padx=10, pady=10)
150
+
151
+
152
+
153
+ # 「だれと」という文字を表示するようのラベル
154
+
155
+ self.label_with = ttk.Label(
156
+
157
+ root,
158
+
159
+ text="だれと",
160
+
161
+ background=("#f08080"),
162
+
163
+ padding=(50, 5)
164
+
165
+ )
166
+
167
+ self.label_with.grid(row=1, column=3, padx=10, pady=10)
168
+
169
+
170
+
171
+ # 「どのように」という文字を表示するようのラベル
172
+
173
+ self.label_how = ttk.Label(
174
+
175
+ root,
176
+
177
+ text="どのように",
178
+
179
+ background=("#ffa500"),
180
+
181
+ padding=(50, 5)
182
+
183
+ )
184
+
185
+ self.label_how.grid(row=1, column=4, padx=10, pady=10)
186
+
187
+
188
+
189
+ # 「なにをした」という文字を表示するようのラベル
190
+
191
+ self.label_do = ttk.Label(
192
+
193
+ root,
194
+
195
+ text="なにをした",
196
+
197
+ background=("#da70d6"),
198
+
199
+ padding=(50, 5)
200
+
201
+ )
202
+
203
+ self.label_do.grid(row=1, column=5, padx=10, pady=10)
204
+
205
+ # 結果を表示するよう
206
+
207
+ self.label_answer = (ttk.Label(root), ttk.Label(root), ttk.Label(root),
208
+
209
+ ttk.Label(root), ttk.Label(root), ttk.Label(root))
210
+
211
+ for i, l in enumerate(self.label_answer):
212
+
213
+ l.configure(background=("#ffffff"),padding=(50, 5),relief="ridge")
214
+
215
+ l.grid(row=2, column=i, padx=10, pady=10)
216
+
217
+ self.set_answer()
218
+
219
+
220
+
69
221
  self.button1 = ttk.Button(
70
222
 
71
223
  self, text="OK?",padding=(50, 5),command=self.buttonClick)
72
224
 
73
225
  self.button1.grid(row=3, column=0, padx=10, pady=10, columnspan=6)
74
226
 
75
- self.label_answer = (ttk.Label(root), ttk.Label(root), ttk.Label(root),
227
+
76
-
228
+
77
- ttk.Label(root), ttk.Label(root), ttk.Label(root))
229
+ def set_answer(self):
78
-
79
-
80
-
81
- # 結果を表示するよう
230
+
82
-
83
- for i, l in enumerate(self.label_answer):
231
+ for i, v in enumerate(self.word.get5W1H()):
84
-
85
- l.configure(text="aaaa",background=("#ffffff"),padding=(50, 5),relief="ridge")
232
+
86
-
87
- l.grid(row=2, column=i, padx=10, pady=10)
233
+ self.label_answer[i].configure(text=v)
88
-
89
-
90
234
 
91
235
 
92
236
 
93
237
  def buttonClick(self):
94
238
 
95
- when, where = self.word.get5W1H()
96
-
97
- self.label_answer[0].configure(text=when)
239
+ self.set_answer()
98
-
99
- self.label_answer[1].configure(text=where)
100
240
 
101
241
 
102
242
 

6

サンプルコードを追加

2018/04/21 16:28

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -24,21 +24,29 @@
24
24
 
25
25
  こんな感じでしょうか。
26
26
 
27
- 処理の1の部分のサンプルソースコードです。ご参考まで。
27
+ サンプルソースコードです。ご参考まで。
28
28
 
29
29
  ```Python
30
30
 
31
- # -*- coding: utf-8 -*-
31
+ from tkinter import *
32
+
33
+ from tkinter import ttk
32
34
 
33
35
  from random import choice
36
+
37
+
38
+
39
+
34
40
 
35
41
  class Word(object):
36
42
 
37
43
  def __init__(self):
38
44
 
39
- self.when_list = ['今日','明日']
45
+ self.when_list = ['今日', '明日']
40
46
 
41
- self.where_list = ['東京','埼玉']
47
+ self.where_list = ['東京', '埼玉']
48
+
49
+
42
50
 
43
51
  def get5W1H(self) -> list:
44
52
 
@@ -46,13 +54,65 @@
46
54
 
47
55
 
48
56
 
57
+
58
+
59
+ class MyFrame(ttk.Frame):
60
+
61
+ def __init__(self, root):
62
+
63
+ super().__init__(root, height=300, width=500)
64
+
65
+ self.grid()
66
+
67
+ self.word = Word()
68
+
69
+ self.button1 = ttk.Button(
70
+
71
+ self, text="OK?",padding=(50, 5),command=self.buttonClick)
72
+
73
+ self.button1.grid(row=3, column=0, padx=10, pady=10, columnspan=6)
74
+
75
+ self.label_answer = (ttk.Label(root), ttk.Label(root), ttk.Label(root),
76
+
77
+ ttk.Label(root), ttk.Label(root), ttk.Label(root))
78
+
79
+
80
+
81
+ # 結果を表示するよう
82
+
83
+ for i, l in enumerate(self.label_answer):
84
+
85
+ l.configure(text="aaaa",background=("#ffffff"),padding=(50, 5),relief="ridge")
86
+
87
+ l.grid(row=2, column=i, padx=10, pady=10)
88
+
89
+
90
+
91
+
92
+
93
+ def buttonClick(self):
94
+
95
+ when, where = self.word.get5W1H()
96
+
97
+ self.label_answer[0].configure(text=when)
98
+
99
+ self.label_answer[1].configure(text=where)
100
+
101
+
102
+
103
+
104
+
49
105
  def main() ->None:
50
106
 
51
- w = Word()
107
+ root = Tk()
52
108
 
53
- for i in range(10):
109
+ root.title("いつどこで・・・")
54
110
 
111
+ f = MyFrame(root)
112
+
55
- print(w.get5W1H())
113
+ root.mainloop()
114
+
115
+
56
116
 
57
117
 
58
118
 

5

追記

2018/04/21 16:00

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  こんな感じでしょうか。
26
26
 
27
- サンプルソースコードです。ご参考まで。
27
+ 処理の1の部分のサンプルソースコードです。ご参考まで。
28
28
 
29
29
  ```Python
30
30
 

4

サンプルソースコード

2018/04/21 14:26

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -23,3 +23,41 @@
23
23
 
24
24
 
25
25
  こんな感じでしょうか。
26
+
27
+ サンプルソースコードです。ご参考まで。
28
+
29
+ ```Python
30
+
31
+ # -*- coding: utf-8 -*-
32
+
33
+ from random import choice
34
+
35
+ class Word(object):
36
+
37
+ def __init__(self):
38
+
39
+ self.when_list = ['今日','明日']
40
+
41
+ self.where_list = ['東京','埼玉']
42
+
43
+ def get5W1H(self) -> list:
44
+
45
+ return [choice(self.when_list), choice(self.where_list)]
46
+
47
+
48
+
49
+ def main() ->None:
50
+
51
+ w = Word()
52
+
53
+ for i in range(10):
54
+
55
+ print(w.get5W1H())
56
+
57
+
58
+
59
+ if __name__ == '__main__':
60
+
61
+ main()
62
+
63
+ ```

3

追記

2018/04/21 14:19

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -4,7 +4,15 @@
4
4
 
5
5
  私がこのプログラムを作るとしたら画面(UI)とデータは分けるので以下のような形になるかと。
6
6
 
7
+ 1. Wordクラスを変更
8
+
9
+ 1-1, `__init__(self):` を追加しwhen_list,where_list の初期化はそちらで行うように
10
+
11
+ 1-2. getXXX,setXXXは全部削除
12
+
7
- 0. WordクラスのbuttonClickは5W1Hを生成してlistを戻り値として返すだけに。(あと関数名を変更)
13
+ 1-3. buttonClickは5W1Hを生成してlistを戻り値として返すだけに。(あと関数名を変更)
14
+
15
+ 1-4. random.randintではなくrandom.choiceを使用するように変更
8
16
 
9
17
  0. ttk.Frameを管理するクラスMyFrameを作成
10
18
 

2

追記

2018/04/21 14:11

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -1,4 +1,4 @@
1
- 原因はWordクラスのbuttonClickの処理でLabelへの更新処理がないからだと思われますが。
1
+ 原因はWordクラスのbuttonClickの処理でLabelへの更新処理(`Label.configure(text='文字列')`)がないからだと思われますが。
2
2
 
3
3
 
4
4
 

1

追記

2018/04/21 14:01

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -1,6 +1,8 @@
1
1
  原因はWordクラスのbuttonClickの処理でLabelへの更新処理がないからだと思われますが。
2
2
 
3
3
 
4
+
5
+ 私がこのプログラムを作るとしたら画面(UI)とデータは分けるので以下のような形になるかと。
4
6
 
5
7
  0. WordクラスのbuttonClickは5W1Hを生成してlistを戻り値として返すだけに。(あと関数名を変更)
6
8