回答編集履歴

1

終了処理修正

2018/09/19 12:33

投稿

opyon
opyon

スコア1009

test CHANGED
@@ -8,6 +8,8 @@
8
8
 
9
9
 
10
10
 
11
+ レイアウトは冗長なので割愛。
12
+
11
13
  ```Python3
12
14
 
13
15
  # coding=UTF-8
@@ -30,41 +32,71 @@
30
32
 
31
33
  def __init__(self, master = None):
32
34
 
35
+
36
+
33
37
  self.th_main = None
34
38
 
39
+ self.update_time = 0.02
40
+
41
+
42
+
35
- tk.Frame.__init__(self, master)
43
+ super().__init__(master)
36
44
 
37
45
  self.master.title("Sample Stop Watch")
38
46
 
39
- self.master.bind("<Control-q>", self.quit)
40
-
41
- self.master.geometry("280x160")
47
+ self.master.geometry("300x200")
48
+
49
+
50
+
42
-
51
+ # レイアウト?
52
+
43
-
53
+ # must be top, bottom, left, or right
54
+
44
-
55
+ self.f1 = tk.Frame(self)
56
+
57
+ self.f1.lbl_total = tk.Label(self, text = "0.00", font = ("", 30))
58
+
59
+ self.f1.lbl_total.pack()
60
+
45
- self.lbl_msg = tk.Label(master, text = "<quit:Control-q>")
61
+ self.f1.lbl_lap = tk.Label(self, text = "0.00", font = ("", 20))
46
-
62
+
47
- self.lbl_msg.pack(side = "top")
63
+ self.f1.lbl_lap.pack()
64
+
48
-
65
+ self.f1.pack()
66
+
67
+
68
+
69
+ self.f2 = tk.Frame(self)
70
+
49
- self.lbl_lap = tk.Label(master, text = "0.00")
71
+ self.f2.btn_run = tk.Button(self.f2, text = "run"
50
-
51
- self.lbl_lap.pack(side = "top")
72
+
52
-
53
-
54
-
55
- self.btn_run = tk.Button(master, text = "run", command = self.run)
73
+ , width = 20, command = self.run)
56
-
74
+
57
- self.btn_run.pack()
75
+ self.f2.btn_run.pack()
76
+
58
-
77
+ self.f2.btn_lap = tk.Button(self.f2, text = "lap"
78
+
79
+ , width = 20, command = self.lap)
80
+
81
+ self.f2.btn_lap.pack()
82
+
59
- self.btn_end = tk.Button(master, text = "end", command = self.end)
83
+ self.f2.btn_end = tk.Button(self.f2, text = "end"
84
+
60
-
85
+ , width = 20, command = self.end)
86
+
61
- self.btn_end.pack()
87
+ self.f2.btn_end.pack()
62
-
88
+
63
- self.btn_quit = tk.Button(master, text = "quit", command = self.quit)
89
+ self.f2.btn_quit = tk.Button(self.f2, text = "quit"
90
+
64
-
91
+ , width = 20, command = self.quit)
92
+
65
- self.btn_quit.pack()
93
+ self.f2.btn_quit.pack()
94
+
66
-
95
+ self.f2.pack()
96
+
97
+
98
+
67
-
99
+ # メインループ
68
100
 
69
101
  def loop(self):
70
102
 
@@ -72,63 +104,129 @@
72
104
 
73
105
  timer_start = time.time()
74
106
 
107
+ self.timer_lap_total = 0
108
+
109
+
110
+
75
111
  self.stop_flg = False
76
112
 
113
+ self.stop_lap = False
114
+
77
115
 
78
116
 
79
117
  while not self.stop_flg:
80
118
 
119
+ # 更新時間
120
+
81
- time.sleep(0.01)
121
+ time.sleep(self.update_time)
122
+
123
+
124
+
82
-
125
+ # トータル更新
126
+
83
- timer_lap = time.time() - timer_start
127
+ timer_total = time.time() - timer_start
128
+
84
-
129
+ out_total = round(timer_total, 2)
130
+
131
+
132
+
133
+ self.f1.lbl_total.configure(text = out_total)
134
+
135
+
136
+
137
+ # ラップ更新
138
+
139
+ if not self.stop_lap:
140
+
141
+ timer_lap = timer_total - self.timer_lap_total
142
+
85
- out_lap = round(timer_lap, 2)
143
+ out_lap = round(timer_lap, 2)
86
-
144
+
87
- self.lbl_lap.configure(text = out_lap)
145
+ self.f1.lbl_lap.configure(text = out_lap)
146
+
147
+
148
+
88
-
149
+ # スレッド開始処理
89
-
90
150
 
91
151
  def run(self):
92
152
 
93
153
  print('Start!')
94
154
 
95
- # スレッド開始処理
96
-
97
- self.th_main
98
-
99
- if not self.th_main:
155
+ if self.th_main == None:
100
-
156
+
101
- self.th_main = th.Thread(target = self.loop).start()
157
+ self.th_main = th.Thread(target = self.loop)
158
+
102
-
159
+ self.th_main.start()
160
+
161
+
162
+
103
-
163
+ # ラップ計算
164
+
165
+ def lap(self):
166
+
167
+ if self.stop_lap:
168
+
169
+ print('Start Lap!')
170
+
171
+ self.timer_lap_tmp = time.time() - self.timer_lap_tmp
172
+
173
+ self.timer_lap_total += self.timer_lap_tmp
174
+
175
+ self.stop_lap = False
176
+
177
+ else:
178
+
179
+ print('Stop Lap!')
180
+
181
+ self.stop_lap = True
182
+
183
+ self.timer_lap_tmp = time.time()
184
+
185
+
186
+
187
+ # スレッド終了処理
104
188
 
105
189
  def end(self):
106
190
 
107
- self.th_join()
108
-
109
191
  print('Stop!')
110
192
 
111
-
112
-
113
193
  self.stop_flg = True
114
194
 
115
195
 
116
196
 
117
- # スレッド終了処理
118
-
119
- def th_join(self):
120
-
121
197
  if self.th_main:
122
198
 
199
+
200
+
201
+ print("end 2-1")
202
+
123
- self.th_main.join()
203
+ print(self.th_main)
124
204
 
125
205
  self.th_main = None
126
206
 
127
-
207
+ print(self.th_main)
208
+
209
+
210
+
211
+ # うまく止まらないので=Noneに変更
212
+
213
+ # self.th_main.th_join()
214
+
215
+ # self.th_main.stop()
216
+
217
+
218
+
219
+ print("end 3-1")
220
+
221
+
222
+
223
+ # フォームを閉じる
128
224
 
129
225
  def quit(self):
130
226
 
227
+ self.stop_flg = True
228
+
131
- self.th_join()
229
+ self.th_main = None
132
230
 
133
231
  sys.exit()
134
232
 
@@ -146,8 +244,4 @@
146
244
 
147
245
  ss.mainloop()
148
246
 
149
- ss.th_main.join()
150
-
151
-
152
-
153
247
  ```