回答編集履歴
5
細部の訂正
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
追記
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
コード再修正
answer
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
ご質問の内容は、ソート途中が表示されず、ソート後しか見ることができないという点かと思います。
|
2
|
-
|
2
|
+
描画周りのコードを修正してみたコードを下記に記載します。
|
3
3
|
|
4
4
|
途中経過が表示されないのは、`root.mainloop()`で画面表示が始まる前に処理がすべて終わってしまっているからです。
|
5
|
-
|
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 ==
|
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
誤記の修正
answer
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
list[j] = list[j+1]
|
27
27
|
list[j+1]=temp
|
28
28
|
break
|
29
|
-
|
29
|
+
self.draw_graph(j)
|
30
30
|
|
31
31
|
def draw_graph(self, loop_count):
|
32
32
|
x = start_x
|
1
記載コードを修正
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
|
-
|
15
|
+
|
16
|
-
|
17
16
|
def next(self, event):
|
17
|
+
self.loop_count += 1
|
18
|
-
if
|
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(
|
23
|
+
for j in range(0,len(list)-self.loop_count):
|
25
|
-
if
|
24
|
+
if list[j] > list[j+1]:
|
26
|
-
temp =
|
25
|
+
temp = list[j]
|
27
|
-
|
26
|
+
list[j] = list[j+1]
|
28
|
-
|
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(
|
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 +
|
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
|
|