回答編集履歴

6

時間制限の実演

2020/06/17 09:33

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -43,3 +43,167 @@
43
43
  - 例: 10分後に終了ページを表示の後に2秒後の切替が発生してしまう
44
44
 
45
45
  - 解消方法: タイマーを全てキャンセル (after_cancel) してから 終了ページを表示
46
+
47
+
48
+
49
+ ----
50
+
51
+ 追記
52
+
53
+
54
+
55
+ ![イメージ説明](69fb5038e882c7591c7af84ecd7eaa67.gif)
56
+
57
+
58
+
59
+ 参考: [#Project In #Tkinter | Creating A #Quiz Application Using Tkinter | In Hindi By Desi Programmer](https://www.youtube.com/watch?v=ES8GDaBbgEI)
60
+
61
+
62
+
63
+ 回答は選択式ですが、手頃な動画があったので実演。
64
+
65
+ ソースコードや使われている画像は一式、動画の概要欄にリンクがあります。
66
+
67
+ 以下は、時間制限を実装したコードの差分です。
68
+
69
+
70
+
71
+
72
+
73
+ ```diff
74
+
75
+ --- quizstar.orig.py 2020-01-21 00:14:18.000000000 +0900
76
+
77
+ +++ quizstar.py 2020-06-17 18:21:10.982065300 +0900
78
+
79
+ @@ -91,21 +91,28 @@
80
+
81
+
82
+
83
+ def calc():
84
+
85
+ global indexes,user_answer,answers
86
+
87
+ - x = 0
88
+
89
+ + global job, job2
90
+
91
+ + if job:
92
+
93
+ + root.after_cancel(job)
94
+
95
+ + job = None
96
+
97
+ + if job2:
98
+
99
+ + root.after_cancel(job2)
100
+
101
+ + job2 = None
102
+
103
+ +
104
+
105
+ score = 0
106
+
107
+ - for i in indexes:
108
+
109
+ - if user_answer[x] == answers[i]:
110
+
111
+ - score = score + 5
112
+
113
+ - x += 1
114
+
115
+ + for x, i in zip(user_answer, indexes):
116
+
117
+ + if x == answers[i]:
118
+
119
+ + score += 5
120
+
121
+ print(score)
122
+
123
+ showresult(score)
124
+
125
+
126
+
127
+ -
128
+
129
+ +job = None
130
+
131
+ +job2 = None
132
+
133
+ ques = 1
134
+
135
+ def selected():
136
+
137
+ global radiovar,user_answer
138
+
139
+ global lblQuestion,r1,r2,r3,r4
140
+
141
+ - global ques
142
+
143
+ + global ques, job
144
+
145
+ x = radiovar.get()
146
+
147
+ user_answer.append(x)
148
+
149
+ radiovar.set(-1)
150
+
151
+ @@ -116,6 +123,8 @@
152
+
153
+ r3['text'] = answers_choice[indexes[ques]][2]
154
+
155
+ r4['text'] = answers_choice[indexes[ques]][3]
156
+
157
+ ques += 1
158
+
159
+ + root.after_cancel(job)
160
+
161
+ + job = root.after(2*1000, selected)
162
+
163
+ else:
164
+
165
+ # print(indexes)
166
+
167
+ # print(user_answer)
168
+
169
+ @@ -188,8 +197,13 @@
170
+
171
+ )
172
+
173
+ r4.pack(pady=5)
174
+
175
+
176
+
177
+ +def timeover():
178
+
179
+ + global job2
180
+
181
+ + job2 = None
182
+
183
+ + calc()
184
+
185
+
186
+
187
+ def startIspressed():
188
+
189
+ + global job, job2
190
+
191
+ labelimage.destroy()
192
+
193
+ labeltext.destroy()
194
+
195
+ lblInstruction.destroy()
196
+
197
+ @@ -197,6 +211,8 @@
198
+
199
+ btnStart.destroy()
200
+
201
+ gen()
202
+
203
+ startquiz()
204
+
205
+ + job = root.after(2*1000, selected)
206
+
207
+ + job2 = root.after(5*1000, timeover)
208
+
209
+ ```

5

文章の修正: 通常スレッド → 「通常、スレッドを使う」

2020/06/17 09:33

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- while や time.sleep を使う場合は通常スレッドを使いますが、
17
+ while や time.sleep を使う場合は通常スレッドを使いますが、
18
18
 
19
19
  簡易的な用途では、タイマーを使うと良いです。tkinter では after というメソッドで
20
20
 

4

master.after -> self.after

2020/06/17 08:31

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
 
30
30
 
31
- master.after(2*1000, lambda: master.switch_frame(NextPage))
31
+ self.after(2*1000, lambda: master.switch_frame(NextPage))
32
32
 
33
33
  ```
34
34
 

3

master.after -> self.after

2020/06/17 08:06

投稿

teamikl
teamikl

スコア8664

test CHANGED
File without changes

2

説明補足

2020/06/17 08:06

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -17,6 +17,8 @@
17
17
  while や time.sleep を使う場合は、通常スレッドを使いますが、
18
18
 
19
19
  簡易的な用途では、タイマーを使うと良いです。tkinter では after というメソッドで
20
+
21
+ 一定時間後に関数の実行が出来ます。
20
22
 
21
23
 
22
24
 

1

誤字修正

2020/06/17 07:27

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- while や time.sleep を使う場合は、通常スレッドを使いますが、動機が手間だったりするので
17
+ while や time.sleep を使う場合は、通常スレッドを使いますが、
18
18
 
19
19
  簡易的な用途では、タイマーを使うと良いです。tkinter では after というメソッドで
20
20