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

回答編集履歴

5

細部の訂正

2017/10/13 22:51

投稿

退会済みユーザー
answer CHANGED
@@ -5,12 +5,11 @@
5
5
  また、グラフの描画ごとにcanvas.update()の実行も必要です。
6
6
 
7
7
  そのため、下記コードではNextボタンを配置して、描画後にソート処理が始まるようにしています。
8
- ボタンクリック時の操作制御は考慮していませんので、連続クリックされるとソート結果がおかしくなったり、1回ごとの処理が終わったかわからなかったりしますが、そのあたりは手抜きしています。
8
+ ボタンクリック時の操作制御は考慮していませんので、連続クリックされるとソート結果がおかしくなったり、1回ごとの処理がいつ終わったかわからなかったりしますが、そのあたりは手抜きしています。
9
9
  また、描画ごとのloop_countを保持するために、DispSortクラスを新規に定義して使用しています。
10
10
 
11
11
  最初から最後まで自動で、ということであれば、動作のきっかけとしてボタンを使って、あとはご質問記載のコードのようにloop_count分の実行をまとめて行われるとよいかと思います。
12
12
 
13
-
14
13
  ```python
15
14
  import tkinter
16
15
  from PIL import Image, ImageTk

4

追記

2017/10/13 22:51

投稿

退会済みユーザー
answer CHANGED
@@ -5,9 +5,12 @@
5
5
  また、グラフの描画ごとにcanvas.update()の実行も必要です。
6
6
 
7
7
  そのため、下記コードではNextボタンを配置して、描画後にソート処理が始まるようにしています。
8
+ ボタンクリック時の操作制御は考慮していませんので、連続クリックされるとソート結果がおかしくなったり、1回ごとの処理が終わったかわからなかったりしますが、そのあたりは手抜きしています。
8
- 描画ごとのloop_countを保持するために、DispSortクラスを新規に定義して使用しています。
9
+ また、描画ごとのloop_countを保持するために、DispSortクラスを新規に定義して使用しています。
10
+
9
11
  最初から最後まで自動で、ということであれば、動作のきっかけとしてボタンを使って、あとはご質問記載のコードのようにloop_count分の実行をまとめて行われるとよいかと思います。
10
12
 
13
+
11
14
  ```python
12
15
  import tkinter
13
16
  from PIL import Image, ImageTk

3

コード再修正

2017/10/13 22:49

投稿

退会済みユーザー
answer CHANGED
@@ -1,10 +1,13 @@
1
1
  ご質問の内容は、ソート途中が表示されず、ソート後しか見ることができないという点かと思います。
2
- あまり直しすぎるのもどうかと思いましたので、色付け処理部分等はそのままにして、描画周りだけ修正してみたコードを下記に記載します。
2
+ 描画周りのコードを修正してみたコードを下記に記載します。
3
3
 
4
4
  途中経過が表示されないのは、`root.mainloop()`で画面表示が始まる前に処理がすべて終わってしまっているからです。
5
- そのNextボタンを配置して、描画ソート処理が始まるようにしたもが下記となります。
5
+ た、グラフの描画ごとcanvas.update()実行も必要です。
6
- 描画ごとのloop_countを保持するために、DispSortクラスを定義して使用しています。
7
6
 
7
+ そのため、下記コードではNextボタンを配置して、描画後にソート処理が始まるようにしています。
8
+ 描画ごとのloop_countを保持するために、DispSortクラスを新規に定義して使用しています。
9
+ 最初から最後まで自動で、ということであれば、動作のきっかけとしてボタンを使って、あとはご質問記載のコードのようにloop_count分の実行をまとめて行われるとよいかと思います。
10
+
8
11
  ```python
9
12
  import tkinter
10
13
  from PIL import Image, ImageTk
@@ -12,11 +15,9 @@
12
15
 
13
16
  class DispSort:
14
17
  loop_count = 0
15
-
18
+
16
19
  def next(self, event):
17
20
  self.loop_count += 1
18
- if not(self.loop_count < len(list)):
19
- return
20
21
 
21
22
  print(str(self.loop_count)+"度目")
22
23
 
@@ -25,7 +26,6 @@
25
26
  temp = list[j]
26
27
  list[j] = list[j+1]
27
28
  list[j+1]=temp
28
- break
29
29
  self.draw_graph(j)
30
30
 
31
31
  def draw_graph(self, loop_count):
@@ -35,15 +35,15 @@
35
35
  sleep(0.5)
36
36
  canvas.delete("graph")
37
37
  for i in range(len(list)):
38
- if i == self.loop_count or i == self.loop_count + 1:
38
+ if i == loop_count or i == loop_count + 1:
39
39
  color="red"
40
40
  else:
41
41
  color="blue"
42
42
  canvas.create_rectangle(x, y, x + list[i] * width_px,
43
43
  y + height_px, fill = color, outline = color, tag = "graph")
44
44
  y = y + height_px + distance_px
45
+ canvas.update()
45
46
 
46
-
47
47
  dispSort = DispSort()
48
48
 
49
49
  root=tkinter.Tk()

2

誤記の修正

2017/10/13 22:45

投稿

退会済みユーザー
answer CHANGED
@@ -26,7 +26,7 @@
26
26
  list[j] = list[j+1]
27
27
  list[j+1]=temp
28
28
  break
29
- self.draw_graph(j)
29
+ self.draw_graph(j)
30
30
 
31
31
  def draw_graph(self, loop_count):
32
32
  x = start_x

1

記載コードを修正

2017/10/13 22:29

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,4 @@
1
- ご質問の内容は、描画途中が表示されず、ソート後しか見ることができないという点かと思います。
1
+ ご質問の内容は、ソート途中が表示されず、ソート後しか見ることができないという点かと思います。
2
2
  あまり直しすぎるのもどうかと思いましたので、色付け処理部分等はそのままにして、描画周りだけ修正してみたコードを下記に記載します。
3
3
 
4
4
  途中経過が表示されないのは、`root.mainloop()`で画面表示が始まる前に処理がすべて終わってしまっているからです。
@@ -12,20 +12,19 @@
12
12
 
13
13
  class DispSort:
14
14
  loop_count = 0
15
- list = [70,12,32,100,2,34,90,33,3,23]
15
+
16
-
17
16
  def next(self, event):
17
+ self.loop_count += 1
18
- if len(self.list) <= self.loop_count:
18
+ if not(self.loop_count < len(list)):
19
19
  return
20
20
 
21
- self.loop_count += 1
22
21
  print(str(self.loop_count)+"度目")
23
22
 
24
- for j in range(0,len(self.list)-self.loop_count):
23
+ for j in range(0,len(list)-self.loop_count):
25
- if self.list[j] > self.list[j+1]:
24
+ if list[j] > list[j+1]:
26
- temp = self.list[j]
25
+ temp = list[j]
27
- self.list[j] = self.list[j+1]
26
+ list[j] = list[j+1]
28
- self.list[j+1]=temp
27
+ list[j+1]=temp
29
28
  break
30
29
  self.draw_graph(j)
31
30
 
@@ -35,12 +34,12 @@
35
34
  root.update
36
35
  sleep(0.5)
37
36
  canvas.delete("graph")
38
- for i in range(len(self.list)):
37
+ for i in range(len(list)):
39
38
  if i == self.loop_count or i == self.loop_count + 1:
40
39
  color="red"
41
40
  else:
42
41
  color="blue"
43
- canvas.create_rectangle(x, y, x + self.list[i] * width_px,
42
+ canvas.create_rectangle(x, y, x + list[i] * width_px,
44
43
  y + height_px, fill = color, outline = color, tag = "graph")
45
44
  y = y + height_px + distance_px
46
45
 
@@ -63,6 +62,7 @@
63
62
  width_px=5
64
63
  height_px=32
65
64
  distance_px=4
65
+ list = [70,12,32,100,2,34,90,33,3,23]
66
66
 
67
67
  dispSort.draw_graph(0)
68
68