回答編集履歴

5

説明変更

2020/02/14 04:05

投稿

shiracamus
shiracamus

スコア5406

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

4

スレッド生成処理変更

2020/02/14 04:05

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -40,15 +40,11 @@
40
40
 
41
41
  ping.running = True
42
42
 
43
- threads = []
43
+ threads = [th.Thread(target=ping, args=(user,)) for user in PEOPLE]
44
44
 
45
- for user in PEOPLE:
45
+ for thread in threads:
46
-
47
- thread = th.Thread(target=ping, args=(user,))
48
46
 
49
47
  thread.start()
50
-
51
- threads.append(thread)
52
48
 
53
49
  return threads
54
50
 

3

res.messages表示

2020/02/14 03:00

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -74,6 +74,8 @@
74
74
 
75
75
  res = p.ping(PEOPLE[user])
76
76
 
77
+ print(user, res.messages)
78
+
77
79
  if res.is_reached():
78
80
 
79
81
  status[user].set(f'□ {user}')

2

PC名修正

2020/02/14 02:50

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  'user3': 'PC3',
26
26
 
27
- 'user4': '10.111.0.1'
27
+ 'user4': 'PC4'
28
28
 
29
29
  }
30
30
 

1

理由追記、KeyboardInterrupt処理追記

2020/02/14 02:43

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,3 +1,5 @@
1
+ root.after を使うとメインスレッドから呼び出されてしまいますよ。普通に time.sleep するといいです。
2
+
1
3
  tkinterはシングルスレッドで動作することを前提に作られているようで、サブスレッドからは 変数ガジェット(`*Var`) にsetするのが無難です。
2
4
 
3
5
 
@@ -22,7 +24,7 @@
22
24
 
23
25
  'user3': 'PC3',
24
26
 
25
- 'user4': 'PC4'
27
+ 'user4': '10.111.0.1'
26
28
 
27
29
  }
28
30
 
@@ -108,9 +110,19 @@
108
110
 
109
111
 
110
112
 
111
- root.mainloop()
113
+ try:
112
114
 
115
+ root.mainloop()
116
+
117
+ except KeyboardInterrupt:
118
+
119
+ print()
120
+
121
+ print("killed")
122
+
123
+ else:
124
+
113
- print("closed")
125
+ print("closed")
114
126
 
115
127
 
116
128