teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

説明変更

2020/02/14 04:05

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -1,5 +1,6 @@
1
- root.after を使うとメインスレッドから呼び出されてしまいます。普通に time.sleep するといいです。
1
+ root.after を使うとメインスレッドから呼び出されてしまいます。普通に time.sleep するといいです。
2
2
  tkinterはシングルスレッドで動作することを前提に作られているようで、サブスレッドからは 変数ガジェット(`*Var`) にsetするのが無難です。
3
+ 以下のようにすることで正常終了するようになりました。
3
4
 
4
5
  ```python
5
6
  import time

4

スレッド生成処理変更

2020/02/14 04:05

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -19,11 +19,9 @@
19
19
 
20
20
  def start_threads():
21
21
  ping.running = True
22
- threads = []
23
- for user in PEOPLE:
24
- thread = th.Thread(target=ping, args=(user,))
22
+ threads = [th.Thread(target=ping, args=(user,)) for user in PEOPLE]
23
+ for thread in threads:
25
24
  thread.start()
26
- threads.append(thread)
27
25
  return threads
28
26
 
29
27
  def stop_threads(threads):

3

res.messages表示

2020/02/14 03:00

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -36,6 +36,7 @@
36
36
  p = pings.Ping()
37
37
  while ping.running:
38
38
  res = p.ping(PEOPLE[user])
39
+ print(user, res.messages)
39
40
  if res.is_reached():
40
41
  status[user].set(f'□ {user}')
41
42
  else:

2

PC名修正

2020/02/14 02:50

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -11,7 +11,7 @@
11
11
  'user1': 'PC1',
12
12
  'user2': 'PC2',
13
13
  'user3': 'PC3',
14
- 'user4': '10.111.0.1'
14
+ 'user4': 'PC4'
15
15
  }
16
16
 
17
17
  root = tk.Tk()

1

理由追記、KeyboardInterrupt処理追記

2020/02/14 02:43

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -1,3 +1,4 @@
1
+ root.after を使うとメインスレッドから呼び出されてしまいますよ。普通に time.sleep するといいです。
1
2
  tkinterはシングルスレッドで動作することを前提に作られているようで、サブスレッドからは 変数ガジェット(`*Var`) にsetするのが無難です。
2
3
 
3
4
  ```python
@@ -10,7 +11,7 @@
10
11
  'user1': 'PC1',
11
12
  'user2': 'PC2',
12
13
  'user3': 'PC3',
13
- 'user4': 'PC4'
14
+ 'user4': '10.111.0.1'
14
15
  }
15
16
 
16
17
  root = tk.Tk()
@@ -53,8 +54,13 @@
53
54
  threads = start_threads()
54
55
  print("started")
55
56
 
57
+ try:
56
- root.mainloop()
58
+ root.mainloop()
59
+ except KeyboardInterrupt:
60
+ print()
61
+ print("killed")
62
+ else:
57
- print("closed")
63
+ print("closed")
58
64
 
59
65
  print("stopping...")
60
66
  stop_threads(threads)