回答編集履歴
1
終了処理修正
answer
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
スレッド終了処理をしていなかったので追記。
|
4
4
|
([@magichanさん回答コード内参考](https://teratail.com/questions/147319))
|
5
5
|
|
6
|
+
レイアウトは冗長なので割愛。
|
6
7
|
```Python3
|
7
8
|
# coding=UTF-8
|
8
9
|
import sys
|
@@ -14,56 +15,104 @@
|
|
14
15
|
class SSW(tk.Frame):
|
15
16
|
|
16
17
|
def __init__(self, master = None):
|
18
|
+
|
17
19
|
self.th_main = None
|
20
|
+
self.update_time = 0.02
|
21
|
+
|
18
|
-
|
22
|
+
super().__init__(master)
|
19
23
|
self.master.title("Sample Stop Watch")
|
20
|
-
self.master.bind("<Control-q>", self.quit)
|
21
|
-
self.master.geometry("
|
24
|
+
self.master.geometry("300x200")
|
22
25
|
|
26
|
+
# レイアウト?
|
27
|
+
# must be top, bottom, left, or right
|
28
|
+
self.f1 = tk.Frame(self)
|
29
|
+
self.f1.lbl_total = tk.Label(self, text = "0.00", font = ("", 30))
|
30
|
+
self.f1.lbl_total.pack()
|
23
|
-
self.
|
31
|
+
self.f1.lbl_lap = tk.Label(self, text = "0.00", font = ("", 20))
|
24
|
-
self.lbl_msg.pack(side = "top")
|
25
|
-
self.lbl_lap = tk.Label(master, text = "0.00")
|
26
|
-
self.lbl_lap.pack(
|
32
|
+
self.f1.lbl_lap.pack()
|
33
|
+
self.f1.pack()
|
27
34
|
|
35
|
+
self.f2 = tk.Frame(self)
|
28
|
-
self.btn_run = tk.Button(
|
36
|
+
self.f2.btn_run = tk.Button(self.f2, text = "run"
|
37
|
+
, width = 20, command = self.run)
|
29
|
-
self.btn_run.pack()
|
38
|
+
self.f2.btn_run.pack()
|
39
|
+
self.f2.btn_lap = tk.Button(self.f2, text = "lap"
|
40
|
+
, width = 20, command = self.lap)
|
41
|
+
self.f2.btn_lap.pack()
|
30
|
-
self.btn_end = tk.Button(
|
42
|
+
self.f2.btn_end = tk.Button(self.f2, text = "end"
|
43
|
+
, width = 20, command = self.end)
|
31
|
-
self.btn_end.pack()
|
44
|
+
self.f2.btn_end.pack()
|
32
|
-
self.btn_quit = tk.Button(
|
45
|
+
self.f2.btn_quit = tk.Button(self.f2, text = "quit"
|
46
|
+
, width = 20, command = self.quit)
|
33
|
-
self.btn_quit.pack()
|
47
|
+
self.f2.btn_quit.pack()
|
48
|
+
self.f2.pack()
|
34
49
|
|
50
|
+
# メインループ
|
35
51
|
def loop(self):
|
36
52
|
|
37
53
|
timer_start = time.time()
|
54
|
+
self.timer_lap_total = 0
|
55
|
+
|
38
56
|
self.stop_flg = False
|
57
|
+
self.stop_lap = False
|
39
58
|
|
40
59
|
while not self.stop_flg:
|
60
|
+
# 更新時間
|
41
|
-
time.sleep(
|
61
|
+
time.sleep(self.update_time)
|
42
|
-
timer_lap = time.time() - timer_start
|
43
|
-
out_lap = round(timer_lap, 2)
|
44
|
-
self.lbl_lap.configure(text = out_lap)
|
45
62
|
|
63
|
+
# トータル更新
|
64
|
+
timer_total = time.time() - timer_start
|
65
|
+
out_total = round(timer_total, 2)
|
66
|
+
|
67
|
+
self.f1.lbl_total.configure(text = out_total)
|
68
|
+
|
69
|
+
# ラップ更新
|
70
|
+
if not self.stop_lap:
|
71
|
+
timer_lap = timer_total - self.timer_lap_total
|
72
|
+
out_lap = round(timer_lap, 2)
|
73
|
+
self.f1.lbl_lap.configure(text = out_lap)
|
74
|
+
|
75
|
+
# スレッド開始処理
|
46
76
|
def run(self):
|
47
77
|
print('Start!')
|
48
|
-
# スレッド開始処理
|
49
|
-
self.th_main
|
50
|
-
if
|
78
|
+
if self.th_main == None:
|
51
|
-
self.th_main = th.Thread(target = self.loop)
|
79
|
+
self.th_main = th.Thread(target = self.loop)
|
80
|
+
self.th_main.start()
|
52
81
|
|
82
|
+
# ラップ計算
|
83
|
+
def lap(self):
|
84
|
+
if self.stop_lap:
|
85
|
+
print('Start Lap!')
|
86
|
+
self.timer_lap_tmp = time.time() - self.timer_lap_tmp
|
87
|
+
self.timer_lap_total += self.timer_lap_tmp
|
88
|
+
self.stop_lap = False
|
89
|
+
else:
|
90
|
+
print('Stop Lap!')
|
91
|
+
self.stop_lap = True
|
92
|
+
self.timer_lap_tmp = time.time()
|
93
|
+
|
94
|
+
# スレッド終了処理
|
53
95
|
def end(self):
|
54
|
-
self.th_join()
|
55
96
|
print('Stop!')
|
56
|
-
|
57
97
|
self.stop_flg = True
|
58
98
|
|
59
|
-
# スレッド終了処理
|
60
|
-
def th_join(self):
|
61
99
|
if self.th_main:
|
100
|
+
|
101
|
+
print("end 2-1")
|
62
|
-
self.th_main
|
102
|
+
print(self.th_main)
|
63
103
|
self.th_main = None
|
104
|
+
print(self.th_main)
|
64
105
|
|
106
|
+
# うまく止まらないので=Noneに変更
|
107
|
+
# self.th_main.th_join()
|
108
|
+
# self.th_main.stop()
|
109
|
+
|
110
|
+
print("end 3-1")
|
111
|
+
|
112
|
+
# フォームを閉じる
|
65
113
|
def quit(self):
|
114
|
+
self.stop_flg = True
|
66
|
-
self.
|
115
|
+
self.th_main = None
|
67
116
|
sys.exit()
|
68
117
|
|
69
118
|
|
@@ -72,6 +121,4 @@
|
|
72
121
|
ss = SSW()
|
73
122
|
ss.pack()
|
74
123
|
ss.mainloop()
|
75
|
-
ss.th_main.join()
|
76
|
-
|
77
124
|
```
|