回答編集履歴
1
終了処理修正
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
|
-
|
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("
|
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_
|
61
|
+
self.f1.lbl_lap = tk.Label(self, text = "0.00", font = ("", 20))
|
46
|
-
|
62
|
+
|
47
|
-
self.lbl_
|
63
|
+
self.f1.lbl_lap.pack()
|
64
|
+
|
48
|
-
|
65
|
+
self.f1.pack()
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
self.f2 = tk.Frame(self)
|
70
|
+
|
49
|
-
self.
|
71
|
+
self.f2.btn_run = tk.Button(self.f2, text = "run"
|
50
|
-
|
51
|
-
|
72
|
+
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
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(
|
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(
|
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(
|
121
|
+
time.sleep(self.update_time)
|
122
|
+
|
123
|
+
|
124
|
+
|
82
|
-
|
125
|
+
# トータル更新
|
126
|
+
|
83
|
-
timer_l
|
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
|
155
|
+
if self.th_main == None:
|
100
|
-
|
156
|
+
|
101
|
-
self.th_main = th.Thread(target = self.loop)
|
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
|
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_
|
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
|
```
|