回答編集履歴

5

細部の訂正

2017/10/13 22:51

投稿

退会済みユーザー
test CHANGED
@@ -12,15 +12,13 @@
12
12
 
13
13
  そのため、下記コードではNextボタンを配置して、描画後にソート処理が始まるようにしています。
14
14
 
15
- ボタンクリック時の操作制御は考慮していませんので、連続クリックされるとソート結果がおかしくなったり、1回ごとの処理が終わったかわからなかったりしますが、そのあたりは手抜きしています。
15
+ ボタンクリック時の操作制御は考慮していませんので、連続クリックされるとソート結果がおかしくなったり、1回ごとの処理がいつ終わったかわからなかったりしますが、そのあたりは手抜きしています。
16
16
 
17
17
  また、描画ごとのloop_countを保持するために、DispSortクラスを新規に定義して使用しています。
18
18
 
19
19
 
20
20
 
21
21
  最初から最後まで自動で、ということであれば、動作のきっかけとしてボタンを使って、あとはご質問記載のコードのようにloop_count分の実行をまとめて行われるとよいかと思います。
22
-
23
-
24
22
 
25
23
 
26
24
 

4

追記

2017/10/13 22:51

投稿

退会済みユーザー
test CHANGED
@@ -12,9 +12,15 @@
12
12
 
13
13
  そのため、下記コードではNextボタンを配置して、描画後にソート処理が始まるようにしています。
14
14
 
15
+ ボタンクリック時の操作制御は考慮していませんので、連続クリックされるとソート結果がおかしくなったり、1回ごとの処理が終わったかわからなかったりしますが、そのあたりは手抜きしています。
16
+
15
- 描画ごとのloop_countを保持するために、DispSortクラスを新規に定義して使用しています。
17
+ また、描画ごとのloop_countを保持するために、DispSortクラスを新規に定義して使用しています。
18
+
19
+
16
20
 
17
21
  最初から最後まで自動で、ということであれば、動作のきっかけとしてボタンを使って、あとはご質問記載のコードのようにloop_count分の実行をまとめて行われるとよいかと思います。
22
+
23
+
18
24
 
19
25
 
20
26
 

3

コード再修正

2017/10/13 22:49

投稿

退会済みユーザー
test CHANGED
@@ -1,14 +1,20 @@
1
1
  ご質問の内容は、ソート途中が表示されず、ソート後しか見ることができないという点かと思います。
2
2
 
3
- あまり直しすぎるのもどうかと思いましたので、色付け処理部分等はそのままにして、描画周りだけ修正してみたコードを下記に記載します。
3
+ 描画周りのコードを修正してみたコードを下記に記載します。
4
4
 
5
5
 
6
6
 
7
7
  途中経過が表示されないのは、`root.mainloop()`で画面表示が始まる前に処理がすべて終わってしまっているからです。
8
8
 
9
- そのNextボタンを配置して、描画ソート処理が始まるようにしたのが下記となります。
9
+ た、グラフの描画ごとcanvas.update()の実行必要です。
10
10
 
11
+
12
+
13
+ そのため、下記コードではNextボタンを配置して、描画後にソート処理が始まるようにしています。
14
+
11
- 描画ごとのloop_countを保持するために、DispSortクラスを定義して使用しています。
15
+ 描画ごとのloop_countを保持するために、DispSortクラスを新規に定義して使用しています。
16
+
17
+ 最初から最後まで自動で、ということであれば、動作のきっかけとしてボタンを使って、あとはご質問記載のコードのようにloop_count分の実行をまとめて行われるとよいかと思います。
12
18
 
13
19
 
14
20
 
@@ -26,15 +32,11 @@
26
32
 
27
33
  loop_count = 0
28
34
 
29
-
35
+
30
36
 
31
37
  def next(self, event):
32
38
 
33
39
  self.loop_count += 1
34
-
35
- if not(self.loop_count < len(list)):
36
-
37
- return
38
40
 
39
41
 
40
42
 
@@ -51,8 +53,6 @@
51
53
  list[j] = list[j+1]
52
54
 
53
55
  list[j+1]=temp
54
-
55
- break
56
56
 
57
57
  self.draw_graph(j)
58
58
 
@@ -72,7 +72,7 @@
72
72
 
73
73
  for i in range(len(list)):
74
74
 
75
- if i == self.loop_count or i == self.loop_count + 1:
75
+ if i == loop_count or i == loop_count + 1:
76
76
 
77
77
  color="red"
78
78
 
@@ -86,7 +86,7 @@
86
86
 
87
87
  y = y + height_px + distance_px
88
88
 
89
-
89
+ canvas.update()
90
90
 
91
91
 
92
92
 

2

誤記の修正

2017/10/13 22:45

投稿

退会済みユーザー
test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
  break
56
56
 
57
- self.draw_graph(j)
57
+ self.draw_graph(j)
58
58
 
59
59
 
60
60
 

1

記載コードを修正

2017/10/13 22:29

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,4 @@
1
- ご質問の内容は、描画途中が表示されず、ソート後しか見ることができないという点かと思います。
1
+ ご質問の内容は、ソート途中が表示されず、ソート後しか見ることができないという点かと思います。
2
2
 
3
3
  あまり直しすぎるのもどうかと思いましたので、色付け処理部分等はそのままにして、描画周りだけ修正してみたコードを下記に記載します。
4
4
 
@@ -26,33 +26,31 @@
26
26
 
27
27
  loop_count = 0
28
28
 
29
- list = [70,12,32,100,2,34,90,33,3,23]
29
+
30
-
31
-
32
30
 
33
31
  def next(self, event):
34
32
 
33
+ self.loop_count += 1
34
+
35
- if len(self.list) <= self.loop_count:
35
+ if not(self.loop_count < len(list)):
36
36
 
37
37
  return
38
38
 
39
39
 
40
40
 
41
- self.loop_count += 1
42
-
43
41
  print(str(self.loop_count)+"度目")
44
42
 
45
43
 
46
44
 
47
- for j in range(0,len(self.list)-self.loop_count):
45
+ for j in range(0,len(list)-self.loop_count):
48
46
 
49
- if self.list[j] > self.list[j+1]:
47
+ if list[j] > list[j+1]:
50
48
 
51
- temp = self.list[j]
49
+ temp = list[j]
52
50
 
53
- self.list[j] = self.list[j+1]
51
+ list[j] = list[j+1]
54
52
 
55
- self.list[j+1]=temp
53
+ list[j+1]=temp
56
54
 
57
55
  break
58
56
 
@@ -72,7 +70,7 @@
72
70
 
73
71
  canvas.delete("graph")
74
72
 
75
- for i in range(len(self.list)):
73
+ for i in range(len(list)):
76
74
 
77
75
  if i == self.loop_count or i == self.loop_count + 1:
78
76
 
@@ -82,7 +80,7 @@
82
80
 
83
81
  color="blue"
84
82
 
85
- canvas.create_rectangle(x, y, x + self.list[i] * width_px,
83
+ canvas.create_rectangle(x, y, x + list[i] * width_px,
86
84
 
87
85
  y + height_px, fill = color, outline = color, tag = "graph")
88
86
 
@@ -128,6 +126,8 @@
128
126
 
129
127
  distance_px=4
130
128
 
129
+ list = [70,12,32,100,2,34,90,33,3,23]
130
+
131
131
 
132
132
 
133
133
  dispSort.draw_graph(0)